Xreferat.com » Рефераты по информатике и программированию » Программирование ориентированное на объекты

Программирование ориентированное на объекты

POINTER TO Фигура_2;

Фигура_2 = RECORD

Сторона_1, Сторона_2, Сторона_3, Сторона_4:

CARDINAL

ЕND

VAR T1, T2: Треугольник; М1, М2: Четырехугольник;

BEGIN NEW(T1);... NEW(M1);... NEW(T2);...

DISPOSE(T1);... DISPOSE(T2); NEW(M2);...


┌───────────────────┐ ─┐

│ WORD │ │

├───────────────────┤ │

│ │ > Свободный фрагмент, ранее

├───────────────────┤ │ использованный под

│ │ │ объект Т1^

├───────────────────┤ ─┘─┐

│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│ │

├───────────────────┤ │

│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│ │

├───────────────────┤ > Фрагмент, занятый

│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│ │ под объект М1^

├───────────────────┤ │

│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│ │

├───────────────────┤ ─┐─┘

│ │ │

├───────────────────┤ │

│ │ > Свободный фрагмент, ранее

├───────────────────┤ │ использованный под

│ │ │ объект Т2^

└───────────────────┘ ─┘


Иллюстрация построена для момента обработки запроса NEW(M2). В этот момент времени в динамической памяти имеются два сво­бо­д­ных фраг­мента общим объемом шесть слов, которых достаточно для вы­­пол­не­ния зап­роса на выделение элемента хранения под объект М2^ (т.е. для объ­екта, на котоpый будет указывать M2), однако фра­г­ментация не поз­­воляет системе выделить память под объект М2^.

Система управления динамической памятью ведет специальный спи­­сок свободных фpагментов - пул памяти. При возвращении какого-либо эле­мента хранения, используемого в прикладной прог­рам­ме, в пул сво­бодной памяти может быть реализовано "скле­и­ва­ние" соседних сво­бод­ных фpагментов в один фpагмент большего объ­ема. Например, если в предыдущей программе изменить пос­ле­до­ва­тель­ность обращений к динамической памяти на приведенную ниже, то описанного выше отказа по памяти не произойдет:

BEGIN NEW(T1);...NEW(T2);...NEW(M1);...

DISPOSE(T1);...DISPOSE(T2);... NEW(M2);...


Здесь при обработке запроса NEW(M2) в пуле динамической па­мя­ти будет находиться один свободный фрагмент объема шесть слов, об­ра­зо­­ван­ный "склеиванием" элементов Т1^ и T2^, выполненным при об­ра­ботке зап­роса DISPOSE(T2). В общем случае вопросы эффективной ре­ализации управления динамической памятью, обеспечивающей ми­ни­мум отказов при ограниченном объеме, составляют отдельную проб­ле­му. Здесь мы только заметим, что с организацией выделения "пер­вого подходящего" фрагмента памяти в программировании свя­зы­ва­ют такие термины как "хип" или "куча", относящиеся скорее к про­фессиональному жаргону, чем к научно-методической тер­ми­но­ло­гии. Тем не менее эти термины до­вольно образно характеризуют прин­ципы организации динамической памяти.

Организация корректной последовательности запросов связана, кро­ме того, как минимум еще с двумя проблемами. На том же жар­го­не их называют проблемы "висячих ссылок" и "мусора", а оп­ре­де­ля­ют они две стороны одной и той же ошибки, заключающейся в некор­ре­кт­ной работе с указателями. Следующий фрагмент программы ил­лю­с­т­ри­рует возникновение таких ошибок (тип "Треугольник" описан выше).


VAR T1, T2:Треугольник;

BEGIN NEW(T1);...T2:=T1;...

DISPOSE(T1); (* T2-"висячая ссылка" *)

............

NEW(T1);...NEW(T2);...

T1:=T2; (* Остался "мусор" *)


Из этого примера понятно, что "висячая ссылка" - это ука­за­тель при­кладной программы, указывающий на свободный фрагмент ди­на­ми­чес­кой памяти. Поскольку этот фрагмент может быть выделен сис­темой по какому-либо запросу другой прикладной программе, Т2 мо­жет открыть дос­туп к "чужим" данным и "разрешить" их ин­тер­пре­тацию как тре­у­голь­ника. Последствия такой интерпретации в об­щем случае непред­ска­зуемы. Заметим, что "висячая" ссылка и "пус­тая" ссылка (имеющая значение NIL, см. pазд.III) являются со­вер­шен­но разными поня­ти­я­ми. "Мусор" - это занятый фрагмент дина­ми­чес­кой памяти, к которому в прикладной программе потерян доступ. В приведенном примере мусором оказался старый треугольник Т1^, на который указывал Т1 до пе­ре­д­виж­ки (установки на Т2). Этот мусор неустраним: программист не име­ет к нему доступа, а система управления "считает" мусор занятым фраг­ментом памяти.

Объединяет эти два вида ошибок одно общее обстоятельство: они не обнаруживаются исполнительной средой. Идентифицировать по­доб­ные ошибки можно только путем тщательной проверки и отладки прог­раммы. И, наконец, по своим возможным влияниям на работу прог­раммы мусор го­раздо "безобиднее" висячей ссылки. Он фак­ти­чес­ки приводит только к увеличенному расходу памяти, в то время как висячая ссылка спо­соб­на при определенных условиях полностью па­рализовать процесс вы­пол­нения программы. В сложных системах "це­на" висячей ссылки может оказаться очень высокой.

Использование автоматической памяти связано с соз­да­ни­ем / унич­то­жением специальных элементов хранения, связанных с актив­ны­ми объ­ектами - действиями или процедурами. Любая процедура тpе­бует для выполнения собственной индивидуальной локальной сре­ды. Подобную сре­ду образуют локальные переменные, объявленные в про­цедуре, фор­маль­ные параметры, элемент хранения адреса воз­вра­та в процедуру, т.е. набор объектов, обеспечивающих выполнение дей­ствий, связанных с процедурой. Необходимость в локальной сре­де возникает только в мо­мент вызова процедуры - момент интер­пре­та­ции объекта процедурного типа. После завершения такой интер­пре­тации необходимость в локальной сре­де исчезает. Таким обра­зом, время жизни локальной среды ог­ра­ни­чи­вается временем от­ра­бот­ки программы, в которой она описана. Со­от­ветственно запрос на создание локальной среды связан с вызовом про­цедуры, а запрос на уничтожение - с окончанием фазы активности объекта (оператор RETURN или END в теле процедуры). Например:

VAR W1, W2: PROC;

PROCEDURE Работа_1;

VAR A: INTEGER;... BEGIN... W2;...

END Работа_1;

PROCEDURE Работа_2;

VAR A: INTEGER;... BEGIN... W2;...

END Работа_2;

BEGIN... W1:=Работа_1;... W2:=Работа_2;... W1;...


В этом фрагменте описаны два активных объекта процедурного типа PROC = PROCEDURE(): W1 и W2 и две процедуры без параметров: Работа_1 и Работа_2, которые могут использоваться как константы ти­па PROC. Интерпретация (активизация) W1 приведет к вызову Работы_1 и созданию локальной среды (содержащей переменную А). В процессе выполнения Работы_1 производится активизация объекта W2 и соответственно создание локальной среды для Работы_2. В любой те­кущий момент времени в системе могут быть активны несколько объ­ек­тов. (В этом примере активизация W1 приводит к активизации W2, за­тем они оба остаются в активном состоянии и затем теряют свою активность в обратной последовательности: сначала пас­си­ви­руется W2, затем W1). Последовательность активации и пассивации свя­зана с вло­женностью вызовов процедур, соответственно уп­рав­ле­ние авто­ма­ти­чес­кой памятью основывается на использовании стека - структуры, под­­держивающей такую вложенность. Ниже для этого фраг­мента при­ве­де­­на иллюстрация распределения автоматической па­мя­ти, суще­ствую­ще­го в течение совместной активности объектов W1 и W2.


┌─ ┌───────────────────┐ ─┐

│ │ Переменная А │ │

│ ├───────────────────┤ > Локальная среда

│ │ Адрес возврата │ │ для W1

Занятое прост- < ├───────────────────┤ ─┤

ранство │ │ Переменная А │ │

│ ├───────────────────┤ > Локальная среда

│ │ Адрес возврата │ │ для W2

Вершина ──> └─ │───────────────────┤ ─┤

стека │ │ │

автоматической │ │ │

памяти │ │ │ Свободное

│ │ > пространство

Пассивация │ │ │ памяти

│ ^ │ │ │

│ │ │ │ │

│ │ │ │ │

v │ └───────────────────┘ ─┘

Активация

При активации каждого нового объекта вершина стека "опус­ка­ет­ся вниз" на величину, определяемую размерами локальной среды этого объ­екта,- при его пассивации вершина стека "поднимается вверх". С использованием автоматической памяти связаны две ос­нов­ные про­б­лемы: рекурсии и множественности ассоциаций.

Рекурсия - механизм, позволяющий объекту совершать само­ак­ти­ва­ц-ию. Например, по схеме:

W1-->W1 (прямая рекурсия)

или W1-->W2 ...-->W1 (косвенная рекурсия).


Прямая рекурсия связана с непосредственной повторной (вло­жен­ной) активацией, а косвенная - с опосредованной (причем число пос­­ред­ников в схеме W1-->...-->W1 может быть произвольным). Ис­поль­зо­ва­ние рекурсии напрямую связано с размерами рабочего прост­ранства авто­матической памяти. Использование рекурсивных акти­ваций объ­ек­тов, с одной стороны, позволяет иметь очень лако­нич­ные и емкие по со­держанию программы, с другой стороны, в ре­кур­сивных схемах (особенно в косвенной рекурсии) возрастает ве­ро­ятность появления трудно идентифицируемых ошибок.

Множественность ассоциаций заключается в том, что в классе ав­­то­матической памяти могут быть одновременно размещены нес­коль­ко од­ноименных объектов, имеющих в общем случае различные значе­ния и относящиеся к разным активностям одного и того же или опять-таки разных объектов. В приведенном примере существуют два одно­именных объекта: переменная А, связанная (ассоциированная) с активностью W1, и переменная А, ассоциированная с активностью объ­екта W2. В со­­ответствии с принципом стека система упpавления автоматической па­мятью всегда pассматpивает в качестве активной пос­леднюю соз­дан­ную ассоциацию (самую "ближнюю" к вершине стека авто­матической па­мя­ти). Возникновение множественности ассоциаций обусловлено только использованием в прикладных программах одно­и­мен­ных переменных с различной областью действия (областью ви­ди­мос­ти). Если уж ис­поль­зо­вание таких переменных и является необ­хо­димым (в чем всегда сто­ит усомниться), то при их интерпретации следует помнить о мно­же­ст­вен­ности ассоциаций.

▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄АБvГ  ДqU  Гm╜  ╛h╤  ¤e└  ╟bе  ┬_  Z@ @@  -xо  ├sч  ■nФ  йiз­  │­d└­  ╨­_w"  Ы"ZB#  B#C#tj#  k#mr#  s#fа#  б#_Ў#  ў#X∙#  ·#QН%  w"  Ы"ЇЇЇЇЇЇ

Н%О%tс&  т&m='  >'fP'  Q'_0(  1(X3(  4(Qq(  w"  Ы"ЇЇЇЇЇЇ

q((vк(  ┤(q╗*  ╩*l/+  N+gS+  T+`я+  ,[,  5,V0  Ї0*0v51  X1qQ9  b9n;  у;kO<  T

3c5ctУc  Фcmf  ffg  ga▀g  щg^ak  ikYjkV╪k  +T  





╪k┘kt l  #lo/m  0mh╓p  ·pc]q  nqaЧq  │q_├q  Zr]░t  ВuZ777



Вupv  zvv
w  1wq╫x  яxlнy  ├yg|z  Иzd┼{  ▄{aF~  b~^BД  BДDДydД  eДwЭД  ЯДu┴Д  ├ДsуД  фДqЕ  Еo>Е  @Еm`Е  aЕkПЕ  СЕi777777777СЕШЕ  нЕy├Е  ┼ЕwхЕ  цЕuЖ  ЖsЭЗ  ║ЗnЙ  ­ЙizЙ  МЙdYЛ  ПЕ  СЕ7777YЛjЛv Л  Мq┘М  уМlшМ  яМgшН  ЄНbUО  aО]Т  ТVТ  YЛ

ТТtэТrмЧ  ╦Чp╪Ч  ┘ЧnєЧ  √ЧlШ  4Шj6Ш  `ШhbШ  eШfgШ  КШd7777777

КШМШ  еШyжШ  оШw╗Ш  ┌Шu█Ш  ▀ШsуШ  Щq#Щ  MЩoOЩ  RЩm_Щ  ЙЩkНЩ  7777777777НЩ╖Щy╣Щ  ╝Щw═Щ  ўЩuЪ  2Ъs4Ъ  ^Ъq█Ы  эЫl╫Э  'Юj-Ю  .Юh6Ю  7Юf777777777ЮHЮ  IЮyRЮ  SЮw]Ю  ^ЮuцЮ  чЮsыЮ  ЇЮq¤Ю  ЯoЯ  ЯmЯ  XЯkZЯ  7777777777ZЯХЯyЧЯ  ╥Яw╘Я  аuа  HаsJа  Баqъл  мl▒  ╧▒ib┤  n┤fS╢  ZЯ  77777S╢_╢v"╣  A╣qt╣  П╣lp╝  ╝gу┼  х┼`╞  ╞Y╞  ╞Rb┤





╞╞  ╞tУ╨  ж╨oЯ╪  ╗╪ju▌  Л▌e╬▌  ▐`Y▀  }▀[ф  "фX

"фAх  [хxQц  mцsнц  ┬цn╪ш  тшiшш  Єшd#щ  :щ_Bщ  PщZы  ы&ыvОы  еыqбь  вьo▒ь  █ьm э  Pёk~ёfzўdвў_]   ы  7676777 ­ v

  c

sF  pK  WmZ  fj╠  ┌g+  Cb  s]sъ  vВ  Мq└  сl=  hg▀  ! bk   Ж ]а#  ╢#Zь(  ь(є(v5,  N,tP,  ?0rA0  у1pц1k@i#@d╦Bb┌B]^G[sGVь(676767777sGНGyЧGt╙G  

Ho║Mm▀MhсMfуMaыM^?N  ╪PЄPYСQ  SWь(776767667S:SvTtTo)T  █Tm▄T  сMfуMaыM^?N  ╪PЄPYСQ  SWь(776767676АГiЖW╔JсJуH╪PЄPYC

B!7р<  Ё<" Ёуn:n<l>lL_U]Г[р<  ?C

B!7рC

B!7рГЕnЦkШiЪiЬiЮiаiвiB!7C<

B!7рвдyжyиyкyмyоy╝l╜  B!7C

B!7рC╜└i╧g╤eUcjcЦc cТcB!ICI

uEu.u╥u═u ЁC?I ═Мy╬wOuпuБu7"cF$aз%aCC  ЁC?Cз%╫%y&yT&yf&yЯ&y▐&yр&y(y∙*y -y?C

-?-y╢.yф0yН5yк9y▀:y;wу;uх;uC?C х;?yщ@y&AyУAy·ByлDyУGy▓HyхHyIy?C

I IyNyЇSy╘Uy·Uy+Vy[VywVy+WyTWy?C

TWXy+XyэZyX[y[y╗[yт[y·[y,y╫]y?C

╫] ^y=^y?^y&_yQ_yS_yay7dymgyBhy?C

BhshyuhyHiykyкkyмky1lyNly}ly┤ly?C

┤lъlyлmy╥my╧ny·nyЗoy╕oyGpy[qy?C [q]qyЙqy├qy qy+ryXry█swУtw░tu?CG ░tВuyДuy­vyJwyqwyЄyy╨zyЇzy({yA{yCC

A{e{yk|yП|y╣|y╩|yЬ}yd~yЯ~yб~y┼yCC

┼tАyАy╖Аy┼Аy№АyБy#Бy)БyхБyуГyCC

уГхГyДwДw,Дw.ДwPДwЙДwлДwнДwGC нД╧ДyЕy(Еy*ЕyLЕy{ЕyШЕyпЕy╤ЕyЖyGG

ЖЖy­ЖyеИwўКw Лw{ОwХПwуПwРwCG РРy┘Рy
Сy5СylСyэТy+УydУyИУy┤УyCC

┤У╞УyшФw2Чu4ЧuoЧsqЧsбЧs═ЧsШsGCIC Ш6ШygШyМШy░ШyуШy#Щy_ЩyНЩy═ЩyЪyIG

Ъ4Ъy`ЪybЪyvЫwЫЬw┐ЬwьЬw*ЭwLЭwCG LЭ╒Эy╫Эy'ЮwрЮwЯwZЯwЧЯw╘ЯwаwGC аJаyГаyЕаy╖аw╣аwKвw7дwtдw░дwCG ░дщдyеyлеy█еyжy<зyBиyУиyсиy%йyCC

%й[йy│йwєйubмsdмqЖмq╜мq╒мqнqCICIC нHнy|нyЙнyЛнy&пyЄ░y▒w╧▒u╥▒uCIC?C ╥▒є▓y┤y9╢yP╕yТ╣y╗yв╝y╪╝y5╜y~┴y?C

~┴Ж├yИ├yн├yр├yў├yz╟yP╩y┤╩yй╦y▄╦y?C

▄╦╠y╠yФ╠y╠╠y═y<═y1╬yю╬yЄ╧yв╤y?C

в╤┤╤y╤╤y▐╤y╥y%╘yS╘yv╘yП╘yн╘y╦╘y?C

╦╘∙╘y╒y╒y,╒yF╒yd╒yВ╒y▓╒y╛╒y└╒y?C

└╒п╓y▒╓y╩╓yф╓y╫y'╫yd╫yМ╫yЫ╫yи╫y?C

и╫╛╪y-┘ye┘y╓┘w┌u#▌s6▐qO▐q|▐qCICIC |▐Я▐y▄▐y▀y▀y ▀y╒▀y
рyOуyhфyнцyIC

нц╪чy2ъyhъyЎыy°ыyVьwБьwдьw
эwGC
эDэyВэy┴эyюy?юy~юy╟юyтюyьюyЎюyGG

Ўюяy

яyяyяw╫яw∙яw+ЁwPЁw∙ЁwCG ∙Ё{Єy}ЄyЄyБЄyєy7єyєy~єyЮєyїyCC

ї@їy╡їyўyў°y∙y.∙y[∙yБ∙yд∙y╟∙yCC

╟∙у∙y√∙y0·ye·yЪ·y╧·y╤■yЇy2yZyCC

ZЙyоy░y^yЪy┘y┤

y+
yZ
y└
yCC



y#

y)yUynyУy╦y"yFw?C F

yyыy╡yрyy╛w╞u$ uCIC $ ф y&­yd­yc yf"yс)yу)y*y3*yo*yIC

o*В*y╖*y╪*y+yU+yi+yд+y┘+y$,yIC $,&,y(,y*,yP,yv,yЫ,y▄,y-yR-yy-yIG

y-а-y╟-yю-y).yb.yЙ.y░.y╫.y№.y!/yIG

!/c/yг/y▄/y0y0wЙ1wx3wи3wс3wCG с3у3y╓6yc8ye8yЖ8yл8yщ8y9y+9ye9yCC

e9g9yю<y#?yCy8CyXCyМCyжCy╞Cy·CyCC

·CDyRDyTDyкHyмHy▌HwIwQIwПIwGC ПI└IyёIy4JyrJyгJy╘JyKyBKyВKy┐KyGG

┐KЎKy-LydLyЫLyнLyуMw?NwiNwаNwCG аNвNy╪Py█Ty▄T  ▌T  CC╥═;L,  C6КЛ$▒:╥═;L,  C6КЛ$╨7▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄7

=жC

п '└-▓4;A╔GN∙T ZР`jgjl╪r╡x­~ОГКYР8Ц╠Ь0дэйепW╡╙╗@┬╞╚r╧З╘х╪а▐#хvыЄw°■0@
вшд5$X*┐1х7+>╘C-LЩRT    k  B  R  u  v  [   U  

*  
i  

e  [  <  ъ  X  A  Г  ╜      ]  2  z  

  9  ї  ═  b   O  ­╞  

  !░  "%  #q  $╡  %

  &  'Б  (

  )P  *о  +0  ,н  -M  .└  /,  0?  19  2!  3x  4  56  6├  7▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄=T╢▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄=БTБ]T      ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ (01/01/9412/03/93T▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄

Если Вам нужна помощь с академической работой (курсовая, контрольная, диплом, реферат и т.д.), обратитесь к нашим специалистам. Более 90000 специалистов готовы Вам помочь.
Бесплатные корректировки и доработки. Бесплатная оценка стоимости работы.

Поможем написать работу на аналогичную тему

Получить выполненную работу или консультацию специалиста по вашему учебному проекту
Нужна помощь в написании работы?
Мы - биржа профессиональных авторов (преподавателей и доцентов вузов). Пишем статьи РИНЦ, ВАК, Scopus. Помогаем в публикации. Правки вносим бесплатно.

Похожие рефераты: