Курсовая: Модули и объекты в языке Турбо Паскаль 7.0 - текст курсовой. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Курсовая

Модули и объекты в языке Турбо Паскаль 7.0

Банк рефератов / Программирование

Рубрики  Рубрики реферат банка

закрыть
Категория: Курсовая работа
Язык курсовой: Русский
Дата добавления:   
 
Скачать
Архив Zip, 47 kb, скачать бесплатно
Заказать
Узнать стоимость написания уникальной курсовой работы

Узнайте стоимость написания уникальной работы

30 Министерство образования Российской Федерации Таможенный колледж Оре нбургский Государственный Аграрный Университет Бузулукское представительство КУРСОВАЯ РАБОТА по дисциплине "Основы алгоритмо в и программирования " Модули и объект ы в языке Турбо Паскаль 7.0 Руководитель работы ________________Симонов а С.В. "______"________________2002г. Исполнитель Студент гр . 34 АСОИ и У ______________Кислинский С.В. "______"________________2002г. Бузулук 2002 Содержание Введение…... ..........................................................................................стр . 3 1 Модули…………………………………………………...……..........стр . 4 1.1 Структура модулей………………………………………...........стр . 6 1.2 Заголовок модулей и связь модулей друг с дру гом……….…стр . 8 1.3 Интерфейсная часть……………………………………………стр . 9 1.4 Исполняемая часть………………………………………...…...стр . 10 1.5 Инициирующая часть………………………....…………...…стр . 11 1.6 Компиляция модулей………………………………….......…стр . 12 1.7 Доступ к объявленн ым в модуле объектам……………..........стр . 14 1.8 Стандартные модули…………………………………………стр . 15 2 Объекты……………………………………………………………..стр . 17 2.1 Основные принципы ООП……………………………………стр . 19 2.2 Инкапсуляция………………………………………………….стр . 20 2.3 Наследование…… ……………………………………………стр . 22 2.4 Полиморфизм…...……………………………………………стр . 24 Заключение……………………………………………………………стр . 26 Список используемых источников…………………………………..стр . 27 Приложение А………………………………………………………...стр . 28 Введение В 1992 году фирма Borland Intern ational выпустила два пакета программирования на использовании языка Паскаль , - Borland Pascal 7.0 и Turbo Pascal 7.0. Пакет Borland Pascal 7.0 учитывает многие новейшие достижения в пр ограммировании и практике создания программ и включает в себя три режим а работ ы : в обычном режиме операционной системы MS DOS , в защищенном режиме MS DOS и в среде Windows . Обладая расширенными возможностями , п акет Borland Pascal 7.0 тем не менее требует для использования всех своих возможностей довольно большую память – прим ерно 30 Мбайт на жестком диске и не менее 2 Мбайт оперативной памяти. Пакет Turbo Pascal 7.0 обладает ограниченными возможностями и позвол яет работать только в обычном режиме MS DOS . Начинающему п рограммисту , по-видимому , целесообразно начать изу чение язы ка и среды именно с этог о пакета. Язык характеризуется расширенными возможност ями по сравнению со стандартом , хорошо раз витой библиотекой модулей , позволяющих использова ть возможности операционной системы , создавать оверлейные структуры , организовывать вво д-в ывод , формировать графическое изображение и т. д . Среда программирования позволяет создавать тексты программ , компилировать их , находить ошибки и оперативно их исправлять , компоноват ь программы из отдельных частей , включая с тандартные модули , отлаживать и выполнять отлаженную программу. В данной работе будут описаны основны е возможности языка , работа в интегрированной среде , набор стандартных модулей . Паскаль замечательный язык программирования , которы й относительно прост в изучении , довольн о ясен и логичен и , будучи первым изуч аемым языком программирования , приучает к хор ошему стилю . Паскаль воспитывает дисциплину с труктурного программирования и программирования вообще лучше , чем другие языки программирован ия , такие , как, например Бейсик. Паскаль – гибкий и развитый в от ношении типов данных язык . Привлекательны его рекурсивные возможности , а также поддержка технологии объектно-ориентрованного программирования. 1 Модули Модуль это автоно мно к омпилируемая программная единица , вк лючающая в себя различные компоненты раздела описаний (типы , константы , переменные , процедур ы и функции ) и , возможно , некоторые исполня емые операторы инициирующей части. Наличие модулей в Turbo Pascal позволяет программи ровать и отлаживать программу по частям , создавать библиотеки подпрограмм и данных , воспользова ться возможностями стандартных модулей , практичес ки неограниченно увеличивать кодовую (содержащую коды команд ) часть программы. Модуль содержит описания типов да нных , переменных и других объектов , а такж е подпрограммы , которые используются в различ ных программах . Подпрограмму имеет смысл вклю чать в состав модуля в том случае , ког да она реализует действие , которое приходится выполнять достаточно часто . Подпрограмм ы , входящие в модуль , можно написать , о тладить и откомпилировать один раз , а испо льзовать многократно. Модули представляют собой прекрасный инст румент для разработки библиотек прикладных пр ограмм и мощное средство модульного программи рования . Важная особенн ость модулей заклю чается в том , что компилятор Турбо Паскаля размещает их программный код в отдельном сегменте памяти . Максимальная длина сегмента не может превышать 64 Кбайта , однако количе ство одновременно используемых модулей ограничив ается лишь доступ н ой памятью , что дает возможность создавать весьма крупные программы . Доступ к описаниям , функциям и процеду рам модуля обеспечивает оператор использования Uses , в котором указывается имя модуля . Этот оператор размещается в ра зделе описаний программы , сразу после за головка . Если в программе используется не один модуль , а несколько , необходимо указать имена всех модулей , перечислив их через запятую . Исключением является модуль System , ссылка на который необязательна . Этот модул ь содержит , в частности , процеду ры фай лового ввода /вывода , процедуры и функции д ля работы со строками и некоторые другие. Модуль начинается заголовком unit unit _ name ; где unit _ name – имя модуля , которое выбирается в соответствии с правилами Паскаля . Файл , содержащий модуль , обязан иметь то же имя , что и модуль. Разберем в качестве примера модуль с описанием гиперболических функций , которых н ет в числе встроенных функций языка Паска ль , но эти функции достаточно часто появля ются в прикладных задачах , и поэтому имеет смысл включить их в сост ав библи отечного модуля . Доступ к функциям из этог о модуля обеспечивает оператор использования Uses , в ко тором указывается имя модуля . Итак , сам мо дуль выглядит следующим образом. $ N + unit hyp _ fun ; interface type Float = Extended; function sin h(x: Float): Float; function cosh(x: Float): Float; function tanh(x: float): Float; implementation var t: Float; function sinh(x: Float): Float; begin t := Exp(x); sinh := 0.5*(t – 1.0/t); end; function cosh(x: Float): Float; begin t := Exp(x); cosh := 0.5*(t + 1.0/t); end; function tanh(x: Float): Float; begin t := Exp(2.0*x); tanh := (t – 1.0) / (t + 1.0); end ; end . Зарезервированн ые слова interface и implementation здесь играют важную роль . Каждый модуль имеет части (сек ции ), озаглавленные этими словами . Секция interface (она назыв ается интерфейсной секцией ) содержит описания констант , типов , переменных и процедур , доступн ых из вызывающей программы или модуля . Сек ция implementation (секция реализации ) содержит и сходный код программы . Она может также содержать локальные описания , такие как var t : Real ; из нашего примера. Каждый модуль начинается с зарезервирован ного слова unit и заканчивается словом end , за котором следует точка . Для этого end не требуется соот ветствующего слова begin , хотя можно и поставить е го непосредственно перед end . Оператор type в начале нашего модуля определяет тип Float , который в данном случае эквивалентен типу Extended . Указав , справ а от знака равенства любой другой эквивал ентный тип, можно изменить точность вычи сления гиперболических функций. 1. 1 Структура модулей Модуль имеет следующую структу ру : Unit module_name Interface Интерфейсная секция Implementation Секция реализации Секция инициализации Рис . 1. Структура модуля Здесь Unit зарезервированное слово (единица ), начинает заголовок модуля ; name имя модуля (пра вильный идентификатор ). Interface – инт ерф ейсная секция – содержит те описания типов , переменных и других объек тов данных , которые можно использовать в д ругих программах или модулях . Секция реализации начинается с зарезервированного слова implementation . Все описания , содерж ащиеся в секции реал изации , являются л окальными , их область действия – данный м одуль . Здесь же содержаться полные описания функций и процедур модуля . Последняя часть модуля – секция инициализ ации . Она может быть пустой и содержать только зарезервированное слово end или в ключа ть в себя исполняемые операторы , выполняющие необходимые действия по инициализаци и (например , по присваиванию начальных значени й переменным ) модуля. В качестве примера рассмотрим модуль func 1 /см . п риложение А /, расширяющий вычислительные возможнос ти Турбо Паскаля , так как он содержи т функции , отсутствующие в стандартных модуля х системы . Среди «стандартных» функций – синус ( Sin ), косинус ( Cos ), арктангенс ( ArcTan ), экспонента ( Exp ), натуральный логарифм ( Ln ), квадрат числа ( Sqr ) и квадратный корень из него ( Sqrt ). В модуле func 1 имеются тангенс ( Tan ), арксинус ( ArcSin ) и арккосинус ( ArcCos ), функции перевода град усной меры в радианную и наоборот ( Degrees _ to _ Radians , Radians _ to _ Degrees ), набор гиперб олических функций ( Sinh , Cosh , Tanh ), а также десятичный лог арифм ( Log 10) и произвольна я степень числа ( Power ). Напомню математическое определение гиперболи ческих функций : В нашем примере интерфейсная секция с одержит описания вещественного типа float , а также к онстанту Infinit y – «бесконечно большое значение» . Бесконечность здесь понимается , разумеется , в смысл машинной арифметики , как значение , близк ое к максимально допустимому для типа Extended . Далее следуют заголовки функций модуля. Секция реализации содержит константы , исп ользуемые в подпрограммах-функциях . Затем идут полные описания функций . Вычисление танг енса использует «классическое» определение этой функции как отношение синуса к косинусу . Учтено также приближение значения тангенса к бесконечности при определенных зна ч ениях аргумента . В этом случае функци я возвращает «машинную бесконечность». При программировании арксинуса и арккосин уса следует учитывать то , что эти функции – многозначные . В нашем случае вычисляет ся «главное значение» , лежащее в интервале [- /2, /2] (для арксину са ) или [0, ] (для арккосинуса ) радиан . Для этого используются формулы , известные из курса элем ентарной математики. При вычислении гиперболических функций учитывается то обстоятельство , что уже при относительно небольших значениях аргумента вычисление экспоненты приводит к арифметичес кому переполнению . В этом случае функция в озвращает «бесконечное» значение. 1.2 Заголовок модуля и св язь модулей друг с другом Заголовок м одуля состоит из зарезервированного слова Unit следующе го за ним имени модуля . Для правильной работы среды Турбо Паскаля и возможности подключения средств , облегчающих разработку кру пных программ , это имя должно совпадать с именем дискового файла , в который п омещается исходный текст модуля . Если , наприме р , имеем заголовок Unit Global ; то исходный текст соответствующего модуля должен размеща ться в дисковом файле GLOBAL.PAS. Имя модуля слу жит для его связи с другими модул ями и основной программой . Эта связь устан авливается специальным предложением Uses <сп.модулей > Здесь U ses - зарезервирова нное слово (использует ); <сп.модулей > - список модулей , с которыми устанавливается связь ; элементам и списка являются имена модулей , отделяемые друг от друга запятыми , например : Uses CRT, Graph, Global: Если объявл ение U ses... используется , оно должно открывать раздел опи саний основной программы . Модули могут испол ьзовать другие - модули . Предложение U ses в модулях может следовать либо сразу за зарезервир ованным словом I nterface, либо сразу за словом Implementation. 1.3 Интерфейсн ая часть Через интер фейс осуществляется взаимодействие основной программы с модулем (модуля с модулем ). В интерфейсе указываются константы , типы , перем енные , процедуры и функции , которые могут быть использованы основной программой (модулем ) при вызове этого модуля. Интерфейсная часть открывается зарезервированным слов ом Interface . В этой части содержатся объявления всех глобальных объектов модуля (типов , констант , переменных и подпрограмм ), к оторые должны стать доступными основной прогр амме и /или другим модулям . При объявлении глобальных подпрограмм в интерфейсной част и указывается только их заголовок , нап ример : Unit Cmplx; Interface type complex = record re, Im : real end; Procedure AddC (x, у : complex; var z : complex); Procedure MulC (x, у : complex; var z : complex); Если теперь в основной программе напи сать предложение Uses Cmplx; то в прог рамме станут доступными тип Complex и две проце дуры Add C и М ul C из м одуля Cmplx . Отметим , что объявление подпрограмм в интерфейсной части автоматически сопровождается их компиляцией с использованием дальней ; модели памяти . Таким образом , обеспечивается доступ к подпрограмм ам из основной программы и других модулей. Следует учест ь , что все константы и переменные , объявленные интерфей сной части модуля , равно как и глобальные константы и переменные основной программы , помещаются компилятором Турбо Паскаля в об щий сегмент данных (максимальная длина сегмен та 65536 байт ). Порядок появ л ения разли чных разделов объявлений и их количество может быть произвольным . Если в интерфейсной части объявляются внешние подпрограммы или подпрограммы в машинных кодах , их тела (т.е . зарезервированное слово External, в первом слу чае , и машинные коды вмес т е со словом Inline во втором ) должны следовать сразу з а их заголовками в исполняемой части моду ля (не в интерфейсной ). В интерфейсной част и модулей нельзя использовать опережающее опи сание. В интерфейсах различных модуле й нед опустимо циклическое обращение друг к другу , т.к . компилятор в этом случае не может установить связей. 1.4 Исполняемая часть Исполняемая часть включает все подпрограммы модуля . Она может также включать локальные метки , кон станты , типы и переменные. Исполняемая часть начинается зарезервиров анным словом Implementation и содержит описания подпрогр амм , объявленных в интерфейсной части . В н ей могут объявляться локальные для модуля объекты - вспомогательные типы , константы , переме нные и блоки , а также метки , если они испол ьзуются в инициирующей части . Описанию подпрограммы , объявленной в инте рфейсной части модуля , в исполняемой части должен предшествовать заголовок , в котором можно опускать список формальных переменных ( и тип результата для функции ), так ка к они уже описаны в интерфейсной части . Но если заголовок подпрограммы приводится в полном виде , т.е . со списком формальных параметров и объявлением результата , он дол жен совпадать с заголовком , объявленным в интерфейсной ч а сти , например : Unit Cmplx; Interface type complex = record; re, im: Real; end; Procedure AddC (x, у : complex; var r : complex); Implementation Procedure AddC; begin z.re := x.re + y.re ; z, i m := x.Im * y. i m ; end; end . Локальные п еременные и к онстанты , а также все программные коды , порожденные при компиляции модуля , помещаются в общий сегмент памяти . В отличие от интерфейсов модулей в исполнительных частях модулей допустимо циклич еское обращение друг к другу , т.к . все равно взаимодействие осущ ествляется через интерфейсы , и здесь не возникает проблемы с установлением необходимых связей. 1.5 Инициирующая часть В некоторых случаях перед обращением к модулю следуе т провести его инициализацию (например , устано вить связь с теми или иными файлами с помощью процедуры Assign , инициализировать какие-то пере менные и т.д .). Необходимые действия можно в ыполнить в секции инициализации модуля . Эта секция начинается словом begin , после которого идут исполняемые операторы , а затем помещается с лово en d . (с точкой ), например : begin Assign ( F 1, ‘ FILE 1. DAT ‘ ); end . В инициирующей части размещают ся исполняемые операторы , содержащие некоторый фрагмент программы . Эти операторы исполняются до передачи управления основной программе и обычно используются для подготовки ее работы . Например , в них могут иницииров аться переменные , открываться нужные файлы , ус танавливаться связи с другими ПК по комму никационным каналам и т.п .: Unit FileText; Interface Procedure Prlnt (t : string); Implementation var f: Text; cons t name = ' OUTPUT. TXT '; Procedure Print ; begin WriteLn (f, s); end; Начало инициирующей части : begin Assign (f, name); Rewri t e (f); Конец инициирующей части : end . Следует иметь в виду , что операторы секции инициализации выполняются еди нственный раз в момент запуска программ ы. Если инициализация модуля не нужна , то в секции помещается лишь слово end . 1.6 Компиляция модулей В среде Турбо Паскаля имеются средств а , управляющие способом компиляции модулей и облегчающие разработку крупных п рограммн ых проектов . В частности , определены три р ежима компиляции : COMPILE, МАКЕ и BUILD. Режимы отличаютс я только способом связи , компилируемого модул я или основной программы с другими модуля ми , объявленными в предложении USES. При компиляции модуля или основной программы в режиме COMPILE все упоминающиеся в предложении USES модули должны быть предварител ьно откомпилированы , и результаты компиляции помещены в одноименные файлы с расширением .TPU. Например , если в программе (модуле ) имеется предложение Use s Global; то на дис ке в каталоге , объявленном опцией UNIT DIRECTORIES, уже должен находиться файл GLOBAL.TPU. Файл с расширени ем TPU (от англ . Turbo Pascal Unit) создается в результате к омпиляции модуля. В режиме МАКЕ компилятор проверяет наличие TPU-файло в для каждого объявленного модуля . Есл и какой-либо из файлов не обнаружен , систе ма пытается отыскать одноименный файл с р асширением .PAS, т.е . файл с исходным текстом м одуля , и , если . P AS-файл найден , приступает к его компиляции . Кроме того , в этом режиме система следит за возможными изменениями исходного текста любого используемого модуля . Если в PAS-файл (исходный текст модуля ) внесены какие-либо изменения , то независимо от того , есть ли уже в каталоге соответс твующий TPU-файл или нет , система осуществля е т его компиляцию перед компиляци ей основной программы . Более того , если из менения внесены в интерфейсную часть модуля , то будут перекомпилированы также и все другие модули , обращающиеся к нему . Режим МАКЕ , таким образом , существенно облегчает процесс разр а ботки крупных програм м с множеством модулей : программист избавляет ся от необходимости следить за соответствием существующих TPU-файлов их исходному тексту , так как система делает это автоматически. В режиме BUILD существующие TPU-файлы игнорируют ся , и сист ема пытается отыскать (и компилировать ) соответствующий PAS-файл для каждого объявленного в предложении USES модуля . После компиляции в режиме BUILD программист может быт ь уверен в том , что учтены все сделанн ые им изменения в любом из модулей. Подключение модулей к основной прог рамме и их возможная компиляция осуществляютс я в порядке их объявления в предложении USES. При переходе к очередному модулю система предварительно отыскивает все модули , на которые он ссылается . Ссылки модулей друг на друга могут об р азовывать древо видную структуру любой сложности , однако запр ещается явное или косвенное обращение модуля к самому себе . Например , недопустимы следующие объявления : Unit A; Unit B; Interface Interface Uses S; Uses A; Implementation Implemen tation end . end . Это ограничение можно обойти , если «спрятать» предложение USES в исполняемые части зависимых модулей : Unit A; Unit B; Interface Interface Implementation Implementation Uses B; Uses A; end . end . Дело в том , что Турбо П аскаль разрешает сс ылки на частично о ткомпилированные модули , что приблизительно соотв етствует опережающему описанию подпрограммы . Если интерфейсные части любых двух модулей не зависимы (это непременное условие !), Турбо Паска ль сможет идентифицировать все глобальные иде нтифи к аторы в каждом из модулей , после чего откомпилирует тела модулей обыч ным способом . 1.7 Доступ к объявленным в модуле объектам Пусть , например , мы создаем модуль , реализующий арифметику комплексных чисел (напомню , что такая ариф метика ни в стандартном Паскале , ни в Турбо Паскале не предусмотрена ). К сожалению , в Турбо Паскале нельзя использовать функции , значения которых имели бы структурированный тип (з апись , например ), поэтому арифметика комплексных чисел реализуется четырьмя п роцедура ми : UNIT Cmplx ; INTERFACE ............................................. type complex = record; re, Im : real; end Procedure AddC (x, у : complex: var z: complex); Procedure SubC (x, у : complex; var z: complex); Procedure MulC (x, у : complex; var z: complex); Procedure DIvC (x, у : complex; var z: complex); const с : complex = (re : 0.1; Im : -1); IMPLEMENTATION .......... — . — .... ...... — -- — — — ...... PROCEDURE AddC; begin z.re := x.re + y.re; z. Im := x . im + у . Im; end AddC ; PROCEDURE SubC; begin z .re := x.re - y.re; z . im := x.Im - y. Im; end SubC ; PROCEDURE MulC; begin z.re := x.re * y.re - x.im * y.im; z.lm := x.re * y.im + x.im * y.re; end MulC ; PROCEDURE DivC; var zz : real; begin zz :=sqr(y.re) + sqr(y.im); z.re := (x.re * y.re + x.im * y.im) / zz; z.lm := (x.re * y.im - x.lm * y.re) / zz; end DIvC : END. Текст этого мо дуля следует поместить в файл CMPLX.PAS. Его можно откомпилировать , создав TPU-файл , по сле чего программе станут доступны процедуры из новой библиотеки. 1.8 Стандартные модули В Турбо Паскале имеется восемь станда ртных модулей , в которых содержится боль шое число разнообразных типов , констант , процедур и функций . Этими модулями являются SYSTEM, DOS, CRT, PRINTER, GRAPH, OVERLAY, TURBO3 и GRAPHS. Модули GRAPH, TURBOS и GRAPHS содержатся в одноименных Т PU-файлах , осталь ные входят в состав библиотечного файл а TURBO.TPL. Лишь один модуль SYSTEM подключается к любой программе автоматически , все остальны е становятся доступны только после указания их имен в списке , следующем за словом USES. Ниже приводится краткая характеристика ста ндартных модулей . Модуль SYSTE M в него вх одят все процедуры и функции стандартного Паскаля , а также встроенные процедуры и функции Турбо Паскаля , которые не вошли в другие стандартные модули (например , INC, DEC, GETDIR и т.п .). Как уже отмечалось , модуль S YSTEM подключается к любой программе независимо о т того , объявлен ли он в предложении USES или нет , поэтому его глобальные константы , переменные и подпрограммы считаются встроенными в Турбо Паскаль . Модуль PRINTER делает доступны м вывод текстов на матричн ы й принтер . В нем определяется файловая переменн ая LST типа TEXT, которая связывается с логическим устройством PRN. После подключения модуля может быть выполнена , например , такая программа : Uses Printer ; begin WriteLn (LST, ' Турбо Пас каль '); end. Модуль CRT. В нем сосредоточены процедуры и функции , обес печивающие управление текстовым режимом работы экрана . С помощью входящих в модуль про грамм можно перемещать курсор в произвольную позицию экрана , менять цвет выводимых сим во лов и окружающего их фона , создавать окна . Кроме того , в модуль включены та кже процедуры «слепого» чтения клавиатуры и управления звуком . Модуль GRAPH содержит обширный набор типов , констант , процедур и функций для управления графическим режимом работы эк р ана . С помощью подпрограмм , в ходящих в модуль GRAPH, можно создавать разнообраз ные графические изображения и выводить на экран текстовые надписи стандартными или р азработанными программистом шрифтами . Подпрограммы модуля GRAPH после соответствующей настро й ки могут поддерживать различные типы аппаратных графических средств . Настройка на имеющиеся в распоряжении программиста технически е средства графики осуществляется специальными программами - драйверами , которые не входят в библиотечный файл GRAPH.TPU, но п оставляю тся вместе с ним . Модуль DOS. В модуле соб раны процедуры и функции , открывающие доступ программам к средствам дисковой операционной системы MS DOS. Модуль OVERLAY. Он необходим при разр аботке громоздких программ с перекрытиями . Ка к уже говорилось, Турбо Паскаль об еспечивает создание программ , длина которых о граничивается лишь доступной оперативной памятью ПК . Для большинства IBM-совместимых ПК досту пная программе память составляет около 580 Кбайт (без инструментальных оболочек типа Norton Commander и без самой системы Турбо Пас каль ). Память такого размера достаточна для большинства применений , тем не менее , исполь зование программ с перекрытиями снимает это ограничение . Два библиотечных модуля TURBO3 и GRAPH3 введены для совместимости с ранней версие й 3.0 системы Турбо Паскаль . 2 Объекты Базовым в объектно-ориентированном программировании является понятие объекта . Объект имеет определённые свойства . Состояние объекта задаётся значениями его признаков . Объект « знает» , как решить определённые задачи , то есть располагает методами реше ния . Программа , написанная с использованием ОО П , состоит из объектов , которые могут взаи модействовать между собой. Ранее отмечалось , что программная реализа ция объекта представляет со бой объединени е данных и процедур их обработки . В Ту рбо Паскале имеется тип object , который можно считать обобщением структурного типа record . Переменные о бъектного типа называются экзем плярами объекта . Здесь требуется уточнение – экземпляр лишь формально можно назвать переменной . Его описание даётся в предложении описания переменных , н о в действительности экземпляр – нечто б ольшее , чем обычная переменная . В отличии от типа «запись» , объектный тип содержит не только поля , описывающие данные , но также проце дуры и функ ции , описания которых содержатся в описании объекта . Эти процедуры и функции называются методами . В описании объекта фактически содержатся лишь шаблоны обращений к методам , которые необходимы компилятору для проверки соответствия количества пара метров и их типов при обращении к методам . Вот пример описания объекта : type Location = object X, Y: Integer; procedure Init (InitX, Inity: Integer); function GetX: Integer; function GetY: Integer; end ; Здесь описывается объект , котор ый может использоваться в дальнейшем , скажем , в графическом режиме и который предназна чен для определения положения на экране п роизвольного графического элемента . Объект описыв ается с помощью зарезервированных слов object … end , между которым и находятся описания полей и методов . В нашем примере объект содержит два поля для хранения значений графических координат , а также описания процедуры и двух функций – это методы данного объекта . П роцедура предназнач ена для задания первоначального положения объ екта , а функции – для считывания его координат. Зарезервированное слово private позволяет ограничить д оступ к полям объекта . В следующем примере доступ к переменным X и Y возможен только через мет оды объектного типа Location : type Location = object procedure Init (InitX, Inity: Integer); function GetX: Integer; function GetY: Integer; private X, Y: integer; end; В секции private могут находится и методы объекта. Полное описание методов , то есть описа ние их реализации , должно находится после описания объекта . Имена методов составные и склад ываются из имени объекта и им ени метода , разделённых точкой : procedure Location. Init (InitX, Inity: Integer); begin X : = InitX; Y : = InitY; end; fuction Location. GetX: Integer; begin GetX : = X; end; fuction Location. GetY: Integer; begin GetY : = Y; end ; После того как объект опис ан , в программе можно использовать его экземпляры , то есть переменные указанного о бъектного типа : var GrMarket : Location; 2.1 Основные принципы ООП Элементы объектно-ориентированного программирования по явились в начале 70-х в языке моделирования Симула , затем получил и своё развитие , и в настоящее время О ОП принадлежит к числу ведущих технологий программирования . В Турбо Паскале поддержка этой технологии появилась , начиная с версии 5.5 (1989 год ). Основна я цель ООП , как и большинства других подходов к программ ированию , - повышение эффективности разработки прог рамм . Идеи ООП оказались плодотворными и н ашли применение не только в языках програ ммирования , но и в других областях Computer Science , например , в о бласти разработки операционных систем. Появление объектно-ориентированного программирова ния было связанно с тем наблюдением , что компьютерные программы представляют собой оп исание действий , выполняемых над различными о бъектами . В роли последних мо гут высту пать , например , графические объек ты , записи в базах данных или совокупности числовых значений . В традиционных методах программирования изменение данных или правил и методов их обработки часто приводило к необходимости значительного изменения программ . Вся к ое существенное изменение пр ограммы – это большая неприятность для п рограммиста , так как при этом увеличивается вероятность ошибок , вследствие чего возрастает время , необходимое для «доводки» программы . Использование ООП позволяет выйти из такой ситуации с минимальными потерями , сводя необходимую модификацию программы к её расширению и дополнению . Сразу замечу , чт о ООП не является панацеей от всех пр ограммистских бед , но его ценность как пер едовой технологии программирования несомненна . Из учение идей и мет о дов объектно-ори ентированного программирования – не очень п ростая задача , однако освоение ООП может с ущественно упростить разработку и отладку сло жных программ. Мы уже привыкли использовать в своих программах процедуры и функции для прогр аммирования тех с ложных действий по о бработке данных , которые приходится выполнять многократно . Использование подпрограмм в своё время было важным шагом на пути к у величению эффективности программирования . Подпрограмм а может иметь формальные параметры , которые при обращен и и к ней заменяются фактическими параметрами . В этом случае е сть опасность вызова подпрограммы с неправиль ными данными , что может привести к сбою программы и её аварийному завершению при выполнении . Поэтому естественным обобщением тра диционного подхода к п рограммированию является объединение данных и подпрограмм ( процедур и функций ), предназначенных для их обработки. 2.2 Инкапсуляция В Турбо Паскале средства о бъектно-ориентированного программирования связаны с тремя зарезервированными словами : OBJECT CONSTRUCTOR и DESTRUCTOR и двумя стандартными директивами : PRIVATE и VIRTUAL. Зарезервированное слово OBJECT используется для описания объекта . Описание объекта должно п омещаться в разделе описания типов , например : type Tpoint = obje ct X,Y: Integer; Координаты точки Color:word; Цве т точки ) Visible: Boolean; Признак светимости Procedure Setlocation (NewX, NewY: integer); Задает новое положение , т очки на экр а не Procedure SetCoforfNewColor: word); У станавливает цвет точки Procedure SetVislble(VIS: Boolean); Выводит или гасит точку ) Procedure GetLocatIon(var Xloc, YLoc:integer); Возвращает координаты точки Function GetColor: word; Возвращает цвет точки ) Function GetVislble: Boolean; Возвращает признак светимости точки end; Конец описания объект а ТР OINT) В этом примере описывается объект TPOINT, представляющий собой данные и методы (процедуры и функции ), необходимые для работы с графическими т очками на экране ПК . Заметим , что инкапсул ированные объект процедуры и функции называют ся методами . Как видим , каждая точка характеризуется некоторым набором данных (своими координатами X и У , цветом COLOR и признаком светимости VISIBLE). Над этими данными определены все необходимые алгоритмические действия . С п омощью этих переменных можно осуществлять все предусмотренные , в объекте действия , например , для переменных типа TPOINT можно высве тить или погасим , любую точку , переместить ее по экрану , изменить цвет. Нетрудно заметить , что описание объекта и использование объектных переменных во мн огом похоже на оп исание и использован ие записей : инкапсулированные в объекте данны е и методы становятся доступны с помощью оператора присоединения WITH или с помощью с оставных имен , например : if Point.GetVisible then Polnt.SetVisible(False); При описании объекта вначале , описываются все инкапсулированные в нем данные , а затем - методы доступа к эти м данным . В качестве методов используются процедуры и функции , а также конструкторы и деструкторы. Таким образом , указание методов при описании объекта подобно их опережающему описанию . Поскольку данные и методы инкапсулированы в одном объекте , все данные автоматически становятся глобальными , по отн ошению к любым методам и могут использова ться в них произвольным образом . Точнее го воря , любой метод объекта работает с невид имым о ператором WITH, обеспечивающим ему доступ ко всем полям (как мы увидим далее , поля могут следовать в объявлении типа и после объявления метода и в эт ом смысле не являться для него глобальным и ). При обращении к методу ему передается особый идентификатор SE L F, представляющи й собой обобщенное имя экземпляра объекта . Любой метод может использовать идентификатор SELF, чтобы явно указать на принадлежащий объек ту метод или поле . Например : type ТСоо = record X.Y: integer; end; TPoint = object X,Y: integer; Procedure lnit(Coo: TCoo); end; Procedure TPofntfCoo: TCoo): begin with Coo do begin Self.X := X; Self.Y := Y; end; end; 2.3 Наследование Любой объек т мо жет быть объявлен потомком ранее описанного объекта . В этом случае он наследует все данные и методы объекта-родител я и может дополнять их своими данными и методами . При объявлении объекта-потомка з а словом OBJECT в круглых скобках указывается имя объекта- р одителя . У объекта мо жет быть сколько угодно потомков , но тольк о один родитель . При объявлении объекта-потомк а TUNE перечислены лишь те данные и методы , которых недостает в объекте-родителе TPOINT, остальн ые TLINE автоматически наследует от своего родите л я. Таким образом , описание объекта-потомка TLINE э квивалентно такому описанию объекта TLINE_ANOTHER: t ype TLine_Another = object X, Y Integer; Координаты начала линии Color word ; Цвет линии ) Visible Boolean ; (Признак свет имости ) XE . YE : Integer ; Координаты второго конца ) Procedure SetLocation(NewX, NewY: integer); Задает новое положение начала линии ) Procedure SetColor ( NewColor : word ) ; Устанавливает цвет линии ) Procedure SetVIsible(Vis: Boolean); Выводит или гасит линию Procedure G etLocation(var XLoc, YLoc: integer); Возвращает координаты начала линии Function GetColor: word; возвращает цвет линии Function GetVisible: Boolean; Возвращает признак светимости линии Procedure SetLIneLocationfxl.X1,Y1,x2 ,y2: integer); Задает ново е положение линии на экране Procedure GetLineLocatlon(var x11,y1l,x2l,y2l):integer); Возвращает координаты линии Procedure SetLineVJsible(vis: Boolean); Выводит или гасит линию ) end; Конец описания объекта TLIne_Another Из этого примера видно главн ое преимущество нас ледования : при описании объекта-потомка вам не т необходимости заново описывать уж существую щие в объекте-родителе поля и методы . Пото мок просто использует их нужным образом д ля реализации требуемых от него действий все , в чем нуждается потомок , это описат ь специфичные для него поля методы , недост ающие в объекте-родителе. Наследование распространяется на любые об ъекты , в том числе и объекты-потомки : если в качестве родителя указано имя объекта , который сам п о себе является пот омком , новый объект наследует все свойства своего родителя и все свойства своих п рародителей . Таким образом , наследование обеспечив ает создание дерева родственных объектов. Как и любое другое дерево , дерево объектов имеет «корень» объект являющийся прародителе м всех других объектов иерархии , и «ветви» порожденные от него потомки . По мере передвижения от корня к ветвям и перехода с ветви на ветвь объекты разрастаются в своих размерах , присоединяя к себе вс е н овые и новые поля и методы . Если иерархия объектов хорошо продумана , на каждом ее уровне к объекту-родителю добавля ются только необходимые поля и методы , поэ тому в таком разрастании на самом деле нет ничего плохого . Более того , компоновщик Турбо Паскаля т щ ательно проверит откомпилированную программу и удалит из нее все лишнее - в том числе в исполняе мую программу (ЕХЕ-файл ) не будут включены методы , которые по каким-либо причинам не используются в программе. Механизм наследования это , пожалуй , самое мо щное свойство ООП . Без наследования объекты превращаются в простую комбинацию данных и подпрограмм , не дающую качественных преимуще ств по сравнению с традиционными для Паск аля процедурами и модулями . Наоборот , механизм наследовани я позволяет строить библиотек у по принципу «от простого - к сложному» . Вводя с помощью наследования новый объект в свою библиотеку , программист в максимал ьной степени использует уже созданные (и , возможно , отлаженные ) ранее объекты . Такой прин цип конструи р ования программ называет ся восходящим программированием . В отличие от нисходящего программирования , он не дает возможности поэтапного создания программы . Мелкие детали реализации объектов заслоняют собою генеральный алгоритм , поэтому при использова нии ООП рекомендуется сочетание подхо дов : методами нисходящего программирования генера льный алгоритм расчленяется на ряд относитель но крупных и законченных в смысловом отно шении фрагментов (модулей ), а реализация этих фрагментов может основываться на объектно-ори е нтированном программировании. 2.4 Полиморфизм Объект-потомок может не только дополнять поля и методы родителя , но и заменять методы родителя на новые (замен ять поля родителя нельзя !). Например , вместо правила SETL I NEVIS I BLE мы могли бы в объекте TLINE объявить пр авило SETVISIBLE, которое в этом случае перекроет ( заменит собой ) одноименное правило объекта-родител я TPOINT. В результате , к разным родственным объ ектам TPOINT и TUNE можно было бы применять одноим енные правила SETVISIBLE, обе с печивающие сходн ые в смысловом отношении действия - показать или сделать невидимым графический объект . С войства , позволяющее называть разные алгоритмичес кие действия одним именем , называется полимор физмом. В Турбо Паскале существует возможность связывания данных с методами на этапе исполнения программы - такое связывание назыв ается поздним . При позднем связывании в оп исании объекта соответствующий метод дополняется стандартной директивой VIRTUAL. Такие методы назыв аются виртуальными . В отличие от этого мет о ды , с которыми осуществлено ранне е связывание (на этапе компиляции ), называются статическими. Появление директивы VIRTUAL в объявлении метода как бы предупреждает компилятор : «Пока ты не знаешь , что я хочу . Придет время -запроси образец !» . Встретившись с т аким объявлением , компилятор не будет устанав ливать связь объекта с методом . Вместо это го он создаст специальную таблицу , которая называется таблицей виртуальных методов (ТВМ ). В этой таблице хранятся адреса точек в хода всех виртуальных методов . Для каждо г о типа объекта создается своя ТВМ и каждый экземпляр объекта пользуется этой единственной для объектов данного т ипа таблицей . ТВМ обеспечивает работающую про грамму механизмом связывания объекта с полями . Фактическое связывание осуществляется с пом ощью обр а щения к конструктору - сп ециальному методу , который во всем подобен обычной процедуре , но в заголовке вместо PROCEDURE содержит зарезервированное слово CONSTRUCTOR. В момен т обращения к конструктору в специальное поле объекта заносится адрес нужной ТВМ , в результате чего все виртуальные м етоды (в том числе и унаследованные от родителей !) получают доступ к нужным полям. Конструктор может не обращаться к вир туальному методу и даже вообще быть пусты м , т.е . не иметь никаких исполняемых операт оров (как в нашем п римере ), тем не менее , объект будет инициализирован правильн о . Дело в том , что заголовок CONSTRUCTOR предписыва ет компилятору создать специальный набор маши нных инструкций , который инициализирует ТВМ и исполняется в момент обращения к констру ктору до выпо л нения его (конструкт ора ) содержательной части . В объекте может быть сколько угодно конструкторов , но ни один из них не может быть виртуальным. Выбор того , каким именно - статическим или виртуальным - должен быть метод , зависит от специфики задачи и Ваших в кусов . Однако следует помнить , что статический метод никогда не может быть перекрыт вирт уальным и наоборот . Список формальных парамет ров статического метода может отличаться от списка в перекрываемом методе , а для виртуальных методов оба списка должны быт ь идентичны . И , наконец , виртуальные объекты занимают несколько большую память (за счет ТВМ ) и вызов виртуальных методо в исполняется чуть медленнее , чем вызов ст атических . Тем не менее , всегда , когда это возможно , следует отдавать предпочтение вирт уальным м етодам , т.к . они придают программе дополнительную гибкость . Всегда может оказаться , что рано или поздно мы или кто-то из пользователей нашей библиотеки за хочет модифицировать ту или иную ее функц ии . В этом случае перекрытие виртуальных м етодов позволит пр е дельно упростить задачу . Отметим , что стандартная функция Турбо Паскаля TypeOf(TObj) возвращает ссылку на ТВМ для объекта типа TObj. Эту ссылку можно исп ользовать , например , для проверки того , с к аким именно объектом работает в данный мо мент виртуальный м е тод : If TypeOf(Self) - TypeOf(TA) then ... И еще одно замечание . Между экземпляра ми родственных объектов возможен обмен информ ацией с помощью операторов присваивания . Напр имер , если PoinTl и Point2 - экземпляры объекта TPOINT, то д опустимо присваивание Point1 := Point2; или PoinT2 := Point1; Присваивания разрешены и между экземпляра ми родственных объектов разных уровней иерарх ии , однако в этом случае экземпляру объект а-родителя можно присвоить экземпляр пот о мка , но не наоборот ! Например , разрешается присваивание Point := Line; но недопустимо Line := Point; если LINE - потомок POINT. Это происходит по той причине , что потомок содержит все поля родителя , поэтому при присва ивании потомка род ителю эти поля получат правильные значения . Обратное же присваивание оставит без измен ения «лишние» поля потомка , что является н едопустимым. При использовании виртуальных правил следует остерегаться присваивания между экземп лярами объект о в , во всяком случае , необходимо помнить , что простое присваивание не заменяет собой инициацию виртуального объекта . Если , например , LINE и POINT - виртуальные об ъекты , то присваивание POINT:= Line; не инициирует объект POIN T, даже если объект LINE был п еред этим инициирован . После такого присваива ния необходим вызов конструктора объекта POINT пе ред обращением к любому виртуальному методу этого объекта. Заключение Мы завершае м рассмотрение основ программирования на Турб о Паскале . Среди них вычисления и об работка информации , использование объектно-ориентирова нного программирования – словом , те задачи , с которыми приходится сталкиваться профессиона льному программисту . Турбо Паскаль был выбран как наилучший язык программиров а ния для обучения основам профессионального пр ограммирования. Турбо Паскаль – достаточно «старый» программный продукт . Следует заметить , однако , что Паскаль – это живой язык . Известны , используются или находятся в стадии разраб отки компиляторы и среды разра ботки п рограмм на Паскале для различных операционных систем , в том числе и бурно развивающ ейся операционной системы Linux . Эти системы иногда частично , а иногда и в значительной мер е совместимы с Турбо Паскалем , а следовате льно , накопленный опыт может быт ь испо льзован и для серьезной , профессиональной раб оты по разработке программ. Список используемых источников 1. Абрамов В.Г ., Трифонов Н.П ., Трифо нова Г.Н . Введение в язык Паскаль . - М .: Н аука , 1988. - 320 с. 2. Абрамов С.А ., Зима Е.В . Начала программирования на языке Пас каль . - М .: Наука , 1987. - 112 с. 3. Вирт Н . Алгоритмы и структуры данных ./Пер . с англ . М .: Мир , 1989. - 360 с. 4. Грогоно П . Программиро вание на языке Паскаль . - М .: Мир , 1982. - 382 с. 5. Дантеманн Дж ., Ми шел Дж ., Тейлор Д . Программирование в среде Delphi: Пер . с англ . - Киев : НИПФ “ДиаСофт Лтд.” , 1995. - 608 с. 6. Епанешников А ., Епанешн иков В . Программирование в среде Турбо Пас каль 7.0. - М .: ДИАЛОГ-МИФИ , 1993. - 288 с. 7. Йенсен К ., Вирт Н . Паскаль . Руков одство для пользователя и описание языка : Пер . с англ . - М .: Финанс ы и статистика , 1982. - 151 с. 8. Матчо Дж ., Фолкнер Д.Р . Delphi: Пер.с англ .- М .: БИНОМ , 1995. - 464 с. 9. Орлик С.В . Секреты Delphi на примерах : - М .: БИНОМ . - 316 с. 10. Перминов О.Н . Пр ограммирование на языке Паскаль . - М .: Ра дио и связь , 1988. - 224 с. 11. Пильшиков В.Н . Сборник упражнений по языку Паскаль : Учеб . пособи е для вузов . - М .: Наука , 1989. - 160 с. 12. Прайс Д . Программирова ние на языке Паскаль : Практ . руководство . - М .: Мир, 1987. - 232 с. 13. Рубенкинг Н . Турбо Паскаль для Windows: В 2 т .; Пер . с англ . - М .: Мир , 1993. - 536 с. 14. Фаронов В.В . Турбо Паскаль . В 3-х книгах . Книга 1. Основы Турбо Паскаля . - М .: Учеб.-инж.центр МВТУ-ФЕСТО ДИДАКТИК , 1992. - 304 с. 15. Фаронов В. В . Па скаль и Windows. - М .: Учеб.-инж.центр МВТУ-ФЕСТО ДИДАКТИ К , 1994. - 539 с. 16. Фаронов В.В . Практика Windows-программирования . М .: Информпечать , 1996. - 247 с . 17. Федоров А ., Рогаткин Д . Borland Pascal в среде Windows. - Киев : Диалектика , 1993. - 65 6 с. 18. Форсайт Р . Паскаль для всех : Пер . с англ .- М .: Машиностроение , 1986. - 288 с. Приложение А (обязательное ) $ N + unit func 1; interface type float = Extended; const Infinity = 1.0E+4932; function Tan(x : float) : float; function ArcSin(x : float) : float; function ArcCos(x : float) : float; function Degrees_to_Radians(Degrees : float) : float; function Radians_to_Degrees(Radians : float) : float; function Sinh(x : float) : float; function Cosh(x : float) : float; function Tanh(x : float) : float; function Log10(x : float) : float; function Power(x, Exponent : float) : float; implementation const Radians_Per_Degree = Pi / 180; Degrees_Per_Radian = 180 / Pi; Ln10 = 2.3025850930; MaxValue = 88.029619; function Tan(x : flo at) : Float; var Consine, Tangent : float; begin Consine := Cos(x); if Cosine := 0.0 then if Sin(x)>=0 then Tan := Infinity else Tan := -Infinity else begin Tangent := Sin(x) / Cosine; if Tangent > Infinity then Tan := Infinity else if Tangent < -Infinity then Tan := -Infinity else Tan := Tangent; end; end; function ArcSin(x : float) : float; begin if Abs(x) = 1.0 then ArcSin := Pi / 2.0 else ArcSin := ArcTan(x / Sqrt(1 – x * x)); end; function ArcCos(x : float) : float; var Result : float; begin if x = 0.0 then ArcCos := Pi / 2.0 else begin Result := ArcTan(sqrt(1 – x * x) / x); if x < 0.0 then ArcCos := Result + Pi else ArcCos := Result; end; end; function Degrees_to_Radians(Degrees : float) : float; begin Degrees_to_Radians := Degrees * Radians_Per_Degree; end; function Radians_to_Degrees(Radians : float) : float; begin Radians_to_Degrees := Radians * Degrees_Per_Radian; end; function Sinh(x : fl oat) : float; var t : float; begin if x > MaxValue then Sinh := Ifinity else if x < -MaxValue then Sinh := -Infinity else begin t := Exp(x); Sinh := 0.5 * (t – 1 / t); end; end; function Cosh(x : float) : float; var t : float; begin if Abs(x) > MaxValue then Cosh := Infinity else begin t := Exp(x); Cosh := 0.5 * (t + 1 / t); end; end; function Tanh(x : float) : float; begin Tanh := Sinh(x) / Cosh(x); end; function Log10(x : float) : float; begin Log10 := Ln(x) / Ln 10; end; function Power(x, Exponent : float) : float; begin if x > 0.0 then Power := Exp(Exponent * Ln(x)) else if x = 0.0 then Power := 0.0 else WriteLn ( ‘ Основание степени отрицательно ! ’ ) ; end; begin end.
1Архитектура и строительство
2Астрономия, авиация, космонавтика
 
3Безопасность жизнедеятельности
4Биология
 
5Военная кафедра, гражданская оборона
 
6География, экономическая география
7Геология и геодезия
8Государственное регулирование и налоги
 
9Естествознание
 
10Журналистика
 
11Законодательство и право
12Адвокатура
13Административное право
14Арбитражное процессуальное право
15Банковское право
16Государство и право
17Гражданское право и процесс
18Жилищное право
19Законодательство зарубежных стран
20Земельное право
21Конституционное право
22Конституционное право зарубежных стран
23Международное право
24Муниципальное право
25Налоговое право
26Римское право
27Семейное право
28Таможенное право
29Трудовое право
30Уголовное право и процесс
31Финансовое право
32Хозяйственное право
33Экологическое право
34Юриспруденция
 
35Иностранные языки
36Информатика, информационные технологии
37Базы данных
38Компьютерные сети
39Программирование
40Искусство и культура
41Краеведение
42Культурология
43Музыка
44История
45Биографии
46Историческая личность
47Литература
 
48Маркетинг и реклама
49Математика
50Медицина и здоровье
51Менеджмент
52Антикризисное управление
53Делопроизводство и документооборот
54Логистика
 
55Педагогика
56Политология
57Правоохранительные органы
58Криминалистика и криминология
59Прочее
60Психология
61Юридическая психология
 
62Радиоэлектроника
63Религия
 
64Сельское хозяйство и землепользование
65Социология
66Страхование
 
67Технологии
68Материаловедение
69Машиностроение
70Металлургия
71Транспорт
72Туризм
 
73Физика
74Физкультура и спорт
75Философия
 
76Химия
 
77Экология, охрана природы
78Экономика и финансы
79Анализ хозяйственной деятельности
80Банковское дело и кредитование
81Биржевое дело
82Бухгалтерский учет и аудит
83История экономических учений
84Международные отношения
85Предпринимательство, бизнес, микроэкономика
86Финансы
87Ценные бумаги и фондовый рынок
88Экономика предприятия
89Экономико-математическое моделирование
90Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
Этих банкиров фиг поймёшь! Сначала рассылают СМС "Бери деньги!", а как только возьмёшь деньги - начинают названивать: "Отдай деньги!" Уже определились бы.
Anekdot.ru

Узнайте стоимость курсовой, диплома, реферата на заказ.

Обратите внимание, курсовая по программированию "Модули и объекты в языке Турбо Паскаль 7.0", также как и все другие рефераты, курсовые, дипломные и другие работы вы можете скачать бесплатно.

Смотрите также:


Банк рефератов - РефератБанк.ру
© РефератБанк, 2002 - 2016
Рейтинг@Mail.ru