Курсовая: Объектно Ц ориентированные языки программирования

              МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ              
                     ВОРОНЕЖСКИЙ ИНСТИТУТ ВЫСОКИХ ТЕХНОЛОГИЙ                     
                    Факультет заочно-дистанционного обучения                    
                             КУРСОВАЯ РАБОТА                             
                         по курсу: "ИНФОРМАТИКА"                         
                                 на тему:                                 
           лОбъектно Ц ориентированные языки программирования           
     

Выполнила:

Принял:

СОДЕРЖАНИЕ I.Введение.. 3 II. Объектно-ориентированная методология программирования 6 III. Объектно-ориентированные языки программирования 12 Smalltalk.. 12 C++. 14 Common Lisp Object System (CLOS) 15 Ada.. 16 Eiffel. 17 Java.. 18 Object Pascal. 18 Система визуального объектно-ориентированного проектирования Delphi. 19 IV.Заключение.. 24 Литература и ссылки.. 26 Приложение.. 27

I.Введение

В настоящее время можно выделить несколько типов языков программирования. Одним из важнейших признаков их классификации является принадлежность их к одному из стилей, основными из которых являются следующие стили:  процедурный,  функциональный,  логический,  объектно-ориентированный. 1. Процедурное программирование Процедурное (императивное) программирование является отражением архитектуры традиционных ЭВМ, которая была предложена фон Нейманом в 40-х годах. Программа на процедурном языке программирования состоит из последовательности операторов (инструкций), задающих процедуру решения задачи. Основным является оператор присваивания, служащий для изменения содержимого областей памяти. Концепция памяти как хранилища значений, содержимое которого может обновляться операторами программы, является фундаментальной в императивном программировании. Процедурные языки характеризуются следующими особенностями: @ необходимостью явного управления памятью, в частности, описанием переменных; @ малой пригодностью для символьных вычислений; @ отсутствием строгой математической основы; @ высокой эффективностью реализации па традиционных ЭВМ. Одним из важнейших классификационных признаков процедурного языка является его уровень. Уровень языка программирования определяется семантической емкостью его конструкций и степенью его ориентации на программиста. Чем более язык ориентирован на человека, тем выше его уровень. К процедурным языкам относятся: язык Ассемблера, С, Basic, Pascal. 2. Функциональное программирование Первым таким языком был LISP. Роль основной конструкции в функциональных (аппликативных) языках играет выражение. К выражениям относятся скалярные константы, структурированные объекты, функции, тела функций и вызовы функций. Аппликативный язык программирования включает следующие элементы: v классы констант, которыми могут манипулировать функции; v набор базовых функций, которые программист может использовать без предварительного объявления и описания; v правила построения новых функций из базовых; v правила формирования выражений на основе вызовов функций. Программа представляет собой совокупность описаний функций и выражения, которые необходимо вычислить. Данное выражение вычисляется посредством редукции, то есть серии упрощений, до тех пор, пока это возможно по следующим правилам: вызовы базовых функций заменяются соответствующими значениями; вызовы небазовых функций заменяются их телами, в которых параметры замещены аргументами. Функциональное программирование не использует концепцию памяти как хранилища значений переменных. Операторы присваивания отсутствуют, вследствие чего переменные обозначают не области памяти, а объекты программы, что полностью соответствует понятию переменной в математике. В принципе, можно составлять программы и вообще без переменных. Кроме того, нет существенных различий между константами и функциями, то есть между программами и данными. В результате этого функция может быть значением вызова другой функции и может быть элементом структурированного объекта. Число аргументов при вызове функции не обязательно должно совпадать с числом параметров, указанных при ее описании. Перечисленные свойства характеризуют аппликативные языки как языки программирования очень высокого уровня. 3. Логическое программирование Новую область Ч логическое, или реляционное программирование, Ч открыло появление языка PROLOG. Этот язык был создан французским ученым А. Кольмероэ в 1973 году. В настоящее время известны и другие языки, однако наиболее развитым и распространенным языком логического программирования является именно Пролог. Языки логического программирования, в особенности Пролог, широко используются в системах искусственного интеллекта. Центральным понятием в логическом программировании является отношение. Программа представляет собой совокупность определений отношений между объектами (в терминах условий или ограничений) и цели (запроса). Процесс выполнения программы трактуется как процесс общезначимости логической формулы, построенной из программы по правилам, установленным семантикой используемого языка. Результат вычисления является побочным продуктом этого процесса. В реляционном программировании нужно только специфицировать факты, на которых алгоритм основывается, а не определять последовательность шагов, которые требуется выполнить. Языки логического программирования характеризуются: Ø высоким уровнем; Ø строгой ориентацией на символьные вычисления; Ø возможностью инверсных вычислений, то есть переменные в процедурах не делятся на входные и выходные; Ø возможной логической неполнотой, поскольку зачастую невозможно выразить в программе определенные логические соотношения, а также невозможно получить из программы все выводы правильные. 4. Объектно-ориентированное программирование Прототипом объектно-ориентированного программирования послужил ряд средств, входящих в состав языка SIMULA-67. Но в самостоятельный стиль оно оформилось с появлением языка SMALLTALK, разработанного А. Кеем в 1972 году и первоначально предназначенного для реализации функций машинной графики. Основная цель ООП, как и большинства других подходов к программированию Ц повышение эффективности разработки программ. Идеи ООП оказались плодотворными и нашли применение не только в языках программирования, но и в других областях Computer Science, например, в области разработки операционных систем. Концепция объектно-ориентированного программирования подразумевает, что основой управления процессом реализации программы является передача сообщений объектам. Поэтому объекты должны определяться совместно с сообщениями, на которые они должны реагировать при выполнении программы. В этом состоит главное отличие ООП от процедурного программирования. Таким образом, объектно-ориентированная программа состоит из объектов Ц отдельных фрагментов кода, обрабатывающего данные, которые взаимодействуют друг с другом через определённые интерфейсы. II. Объектно-ориентированная методология программирования В последнее время развитие аппаратных средств существенно опережало развитие систем и средств программирования. Чтобы выправить положение, в 70-80-х годах были предложены различные подходы к увеличению производительности труда программиста. Среди этих попыток выделяется такое направление, как объектно-ориентированный подход к конструированию и кодированию программ. Особую роль в популярности этого подхода сыграло как его тесная связь с интерфейсами пользователя (особенно графическими), так и включение элементов этого подхода в популярные (на персональных компьютерах фирмы IBM) реализации гибридных языков программирования C++ и Pascal with Objects фирмы Borland. До сих пор большинство используемых программных систем построены на принципах структурного подхода, суть которого состоит в декомпозиции системы на ряд модулей, процедур, функций и структур данных, связанных общим алгоритмом функционирования. Но распространение мощных персональных компьютеров (сравнимых с рабочими станциями 70-80-х годов) создало в 90-х годах основу для широкого применения объектно-ориентированного подхода на практике. В последнее время более широко начинают использоваться языки программирования, созданные в рамках объектно-ориентированной методологии, такие как Smalltalk и Java. Объектно-ориентированная методология (ООМ) ориентирована, прежде всего, на создание больших систем, коллективную их разработку, последующее активное сопровождение при эксплуатации и регулярные модификации. Среди типовых задач, для которых ООМ является перспективной, можно выделить такие:
  • автоматизация эксперимента, робототехника;
  • диспетчеризация, планирование;
  • интерфейс пользователя, анимация;
  • коммуникации, связь;
  • медицина, экспертные системы;
  • обработка коммерческой информации;
  • операционные системы;
  • системы управления;
  • тренажеры, моделирование.
В основе объектно-ориентированной методологии программирования лежит объектный подход, когда прикладная предметная область представляется в виде совокупности объектов, которые взаимодействуют между собой посредством передачи сообщений. Объект Ц это совокупность данных (переменных) и способов работы с ними (компонентных процедур и функций). Состояние объекта характеризуется перечнем всех его возможных (обычно статических) свойств и значениями каждого из этих свойств (обычно динамических). Состояние объекта описывается его переменными. Поведение объекта (или его функциональность) характеризует то, как объект взаимодействует с другими объектами или подвергается взаимодействию других объектов, проявляя свою индивидуальность. Индивидуальность - это такие свойства объекта, которые отличают его ото всех других объектов. Поведение объекта реализуется в виде функций, которые называют методами. При этом структура объекта доступна только через его методы, которые в совокупности формируют интерфейс объекта. Такой подход позволяет локализовать принимаемые решения рамками объекта, объединяя в нем и структуру, и поведение, а, следовательно, снижая сложность отдельной программы (реализующей объект). Эта идея объединения структуры и поведения в одном месте и сокрытия всех данных внутри объекта, что делает их невидимыми для всех, за исключением методов самого объекта называется инкапсуляцией. Это позволяет объектам функционировать совершенно независимо друг от друга, скрывая за интерфейсом детали реализации. Инкапсуляция позволяет рассматривать объекты, как изолированные "черные ящики", которые знают и умеют выполнять определенные действия. С этой точки зрения, внутреннее устройство "черных ящиков" для нас значения не имеет, нам все равно, что происходит внутри. Важно только знать, что надо положить в ящик при обращении к нему и что мы при этом из него получим. Таким образом, объекты объектно-ориентированных систем - это минимальные единицы инкапсуляции. Но как управлять таким миром объектов, когда их становиться достаточно много? Ведь многие из них будут очень сильно отличаться друг от друга, а другие объекты будут очень похожи друг на друга. Здесь на сцену выходит одна из ключевых концепций объектно-ориентированного программирования - идея группировки объектов в классы, в соответствии с тем как они устроены и действуют. Такая идея впервые была реализована еще в 60-ые годы в языке Simula. Под классом понимается множество объектов, связанных общностью структуры и поведения. Класс можно сравнить с шаблоном, по которому создаются объекты. Именно класс вначале описывает переменные и методы объекта, то есть структуру и поведение объекта, и определяет механизмы создания реально существующего в системе объекта, который, когда создается, представляет собой экземпляр класса. Наведение с помощью классов порядка в мире объектов - большое достижение, но можно пойти дальше, определяя некоторый порядок и среди классов. Достигается это с помощью введения механизма наследования - пожалуй, самого мощного средства в любой объектно-ориентированной системе, поскольку оно позволяет многократно использовать однажды созданный код. Механизм наследования очень прост: один класс, называемый в рамках этих отношений суперклассом, полностью передает другому классу, который называется подклассом, свою структуру и поведение, то есть все свои переменные и все методы. Что далее делать с этим богатством определяет только подкласс: он может добавить в структуру что-то свое, что-то из наследуемого интерфейса он может использовать без изменений, что-то изменить, и, разумеется, может добавить свои собственные методы. То есть класс с помощью подклассов расширяется, и как результат, создаваемые объекты становятся все более и более специализированными. Классы, расположенные по принципу наследования, начиная с самого общего, базового класса, образуют иерархию классов. Разумеется, система, реализующая такие принципы построения, предъявляет более жесткие, чем при структурном подходе, требования к производительности вычислительной системы. После краткого описания некоторых ключевых понятий объектно-ориентированной методологии, можно сделать вывод, что концептуально объектно-ориентированная методология программирования опирается на объектный подход, который включает четыре основных принципа: Абстрагирование. Выделение таких существенных характеристик объектов, которые отличают его ото всех других объектов и которые четко определяют особенности данного объекта с точки зрения дальнейшего рассмотрения и анализа. Только существенное для данной задачи и ничего более. Минимальной единицей абстракции в ООМ является класс. Ограничение доступа. Процесс защиты отдельных элементов объекта, не затрагивающий существенных характеристик объекта, как целого. Модульность. Свойство системы, связанное с возможностью декомпозиции на ряд тесно связанных частей (модулей). Модульность опирается на дискретное программирование объектов, которые можно модернизировать или заменять, не воздействуя на другие объекты и систему в целом. Существование иерархий. Ранжирование, упорядочивание по некоторым правилам объектов системы. Объектно-ориентированная методология (ООМ) состоит из следующих частей:
  • объектно-ориентированный анализ (OOA),
  • объектно-ориентированное проектирование (OOD),
  • объектно-ориентированное программирование (OOР).
ООА - методология анализа сущностей реального мира на основе понятий класса и объекта, составляющих словарь предметной области, для понимания и объяснения того, как они (сущности) взаимодействуют между собой. Модели OOA в дальнейшем преобразуются в объектно-ориентированный проект. OOD - методология проектирования программного продукта, соединяющая в себе процесс объектной декомпозиции, опирающийся на выделение классов и объектов, и приемы представления моделей, отражающих логическую (структура классов и объектов) и физическую (архитектура моделей и процессов) структуру системы. Следующие понятия являются в OOD фундаментальными: Инкапсуляция. Инкапсуляция является важнейшим свойством объектов, на котором строится объектно-ориентированное программирование. Инкапсуляция Ц это объединение в одном классе данных и действий над ними. При этом включенные в объект подпрограммы (методы) напрямую работают с данными этого объекта, обращаются к другим методам этого объекта или методам объектов-предков. Инкапсуляция позволяет во многом изолировать класс от остальных частей программы, сделать его лсамодостаточным для решения конкретной задачи. В результате класс всегда несет в себе некоторую функциональность. Например, класс TForm в Delphi содержит (инкапсулирует в себе) все необходимое для создания Windows-окна, класс TTimer обеспечивает работу таймера и т.д. Единицей инкапсуляции в OOD является объект. Наследование позволяет создавать иерархию классов, начиная с некоторого первоначального базового класса (предка) и продолжая более сложными, включающими (наследующими) элементы предшествующих классов (потомков или производных классов). Любой класс может быть порожден от другого класса. Для этого при его объявлении указывается имя класса-родителя: TChildClass = class(TParentClass) (язык Object Pascal) Порожденный класс автоматически наследует поля, методы и свойства своего родителя и может дополнять их новыми. Таким образом, принцип наследования обеспечивает поэтапное создание сложных классов и разработку собственных библиотек классов. Класс, поведение которого наследуется, называется суперклассом, а класс, который наследует поведение, называется подклассом. Принцип наследования приводит к созданию постоянно разрастающегося ветвящегося дерева классов. Каждый потомок дополняет возможности своего родителя новыми и передает их своим потомкам. Полиморфизм Ц это свойство родственных классов решать схожие по смыслу проблемы разными способами. Для различных родственных классов можно задать единый образ действия (например, вывод на экран любой геометрической фигуры). Затем для каждого конкретного класса составляется своя подпрограмма, выполняющая это действие непосредственно для него (отображение точки отличается от отображения линии и т.д.), причем все эти подпрограммы должны иметь одно имя. Когда потребуется отобразить конкретную фигуру, будет выбрана из всего множества одноименных подпрограмм та, которая соответствует типу конкретного объекта. Если выводимый объект является точкой, то выбирается его подпрограмма, если линия Ц то ее. Таким образом, полиморфизм проводит идею лодин интерфейс Ц множество методов. Выбор конкретного действия зависит от ситуации. Созданный проект превращается в программный продукт в процессе объектно- ориентированного программирования - такой методологии программирования, которая основана на представлении программного продукта в виде совокупности объектов, каждый из которых является слепком (экземпляром) определенного класса, а классы образуют иерархию на принципах наследования. Таким образом, при объектно-ориентированном подходе исчезает понятие исполняемой программы. Решение поставленной задачи сводится к построению необходимых классов, и управлению создаваемыми ими объектами-экземплярами. Фундаментальная концепция OOP состоит в том, что объекты и классы взаимодействуют друг с другом путем передачи сообщений. Для этого необходимо, чтобы объекты определялись вместе с сообщениями, на которые они реагируют, в отличие от процедурного стиля программирования, когда сначала определяются данные, которые затем передаются в процедуры (функции) как параметры. При этом средством программирования выступает один из объектно-ориентированных языков программирования. Язык программирования называется объектно-ориентированным, если
  • есть поддержка объектов как абстракций данных, имеющих интерфейсную часть в виде поименованных операций, и защищенную область локальных данных;
  • все объекты относятся к соответствующим типам (классам);
  • классы могут наследовать от суперклассов.
  • любые данные хранятся как объекты, размещаемые с автоматическим выделением и освобождением памяти. Объект существует с системе до тех пор, пока его можно именовать.
Последний принцип отличает чистые объектно-ориентированные языки такие как Smalltalk, Actor, от гибридных языков программирования, выросших из ранее существовавших процедурных языков (Object Pascal, C++). Эти подходы - как бы крайности в семействе объектно-ориентированных языков. Ближе к середине лежит совершенно новый, полностью построенный на принципах объектно-ориентированной идеологии, но все же нарушающий последний принцип, язык Java.

III. Объектно-ориентированные языки программирования

Объектно-ориентированные языки программирования пользуются в последнее время большой популярностью среди программистов, так как они позволяют использовать преимущества объектно-ориентированного подхода не только на этапах проектирования и конструирования программных систем, но и на этапах их реализации, тестирования и сопровождения. Первый объектно-ориентированный язык программирования Simula 67 был разработан в конце 60-х годов в Норвегии. Авторы этого языка очень точно угадали перспективы развития программирования: их язык намного опередил свое время. Однако современники (программисты 60-х годов) оказались не готовы воспринять ценности языка Simula 67, и он не выдержал конкуренции с другими языками программирования (прежде всего, с языком Fortran). Прохладному отношению к языку Simula 67 способствовало и то обстоятельство, что он был реализован как интерпретируемый (а не компилируемый) язык, что было совершенно неприемлемым в 60-е годы, так как интерпретация связана со снижением эффективности (скорости выполнения) программ. Но достоинства языка Simula 67 были замечены некоторыми программистами, и в 70-е годы было разработано большое число экспериментальных объектно- ориентированных языков программирования: например, языки CLU, Alphard, Concurrent Pascal и др. Эти языки так и остались экспериментальными, но в результате их исследования были разработаны современные объектно- ориентированные языки программирования. Обзор некоторых современных объектно-ориентированных языков приводится ниже.

Smalltalk

Язык Smalltalk был разработан командой Xerox Palo Alto Research Center Learning Research Group как программная часть Dynabook - фантастического проекта Алана Кея. В основу были положены идеи Simula.. Smalltalk является одновременно и языком программирования, и средой разработки программ. Это чисто объектно-ориентированный язык, в котором абсолютно все рассматривается как объекты; даже целые числа - это классы. Вслед за Simula, Smalltalk является важнейшим объектно-ориентированным языком, поскольку он не только оказал влияние на последующие поколения языков программирования, но и заложил основы современного графического интерфейса пользователя, на которых непосредственно базируются интерфейсы Macintosh, Windows и Motif. Известны пять выпусков языка Smalltalk, обозначаемых по году их появления: Smalltalk-72, -74. -76, -78, -80. Реализации 1972 и 1974 годов заложили основу языка, в частности идею передачи сообщений и полиморфизм, хотя механизм наследования еще не появился. В последующих версиях полноправное гражданство получили классы; этим достигла завершения точка зрения, что все состоит из объектов. Smalltalk-80 был перенесен на многие компьютерные платформы. В основу языка положены две простые идеи:
  • все является объектами;
  • объекты взаимодействуют, обмениваясь сообщениями.
В табл.1 приведены характеристики языка Smalltalk с точки зрения семи основных элементов объектного подхода.

Абстракции

Переменные экземпляра

Методы экземпляра

Переменные класса

Методы класса

Да

Да

Да

Да

Инкапсуляция

Переменных

Методов

Закрытые

Открытые

Модульность

Разновидности модулейНет

Иерархии

Наследование

Шаблоны

Метаклассы

Одиночное

Нет

Да

Типизация

Сильная типизация

Полиморфизм

Нет

Да (одиночный)

Параллельность

МногозадачностьНепрямая (посредством классов)

Сохраняемость

Долгоживущие объектыНет
Таблица 1. Smalltalk. [1] Большим недостатком Smalltalk являются большие требования к памяти и низкая производительность полученных программ. Это связано с не очень удачной реализацией объектно-ориентированных особенностей.

C++

Язык программирования C++ был разработан Бьерном Страуструпом, сотрудником AT&T Bell Laboratories. Непосредственным предшественником C++ является С with Classes, созданный тем же автором в 1980 году. Язык С with Classes, в свою очередь, был создан под сильным влиянием С и Simula. C++ - это в значительной степени надстройка над С. В определенном смысле можно назвать C++ улучшенным С, тем С, который обеспечивает контроль типов, перегрузку функций и ряд других удобств. Но главное в том, что C++ добавляет к С объектную ориентированность. Известны несколько версий C++. В версии 1.0 реализованы основные механизмы объектно-ориентированного программирования, такие как одиночное наследование и полиморфизм, проверка типов и перегрузка функций. В созданной в 1989 году версии 2.0 нашли отражение многие дополнительные свойства, возникшие на базе широкого опыта применения языка многочисленным сообществом пользователей. В версии 3.0 (1990) появились шаблоны и обработка исключений. C++ продолжает совершенствоваться и в настоящее время, так в 1998 году вышла новая версия стандарта, содержащая в себе некоторые довольно существенные изменения. Язык стал основой для разработки современных больших и сложных проектов. Характеристики C++ приведены в табл. 3.

Абстракции

Переменные экземпляра

Методы экземпляра

Переменные класса

Методы класса

Да

Да

Да

Да

Инкапсуляция

Переменных

Методов

Открытые, защищенные, закрытые

Открытые, защищенные, закрытые

Модульность

Разновидности модулейфайл

Иерархии

Наследование

Шаблоны

Метаклассы

Множественное

Да

Нет

Типизация

Сильная типизация

Полиморфизм

Да

Да (одиночный)

Параллельность

МногозадачностьНепрямая (посредством классов)

Сохраняемость

Долгоживущие объектыНет
Таблица 3. C++. [1]

Common Lisp Object System (CLOS)

В начале 80-х годов под воздействием идей объектно-ориентированного программирования возникла серия новых диалектов Lisp, многие из которых были ориентированы на представление знаний. Успех в стандартизации Common Lisp стимулировал попытки стандартизировать объектно-ориентированные диалекты в 1986 году. Поскольку новый диалект должен был стать надстройкой над Common Lisp, он получил название Common Lisp Object System (Объектная система Common Lisp) или, сокращенно, - CLOS. Серьезное влияние на проект CLOS оказали языки NewFlavors и CommonLoops. После двухлетней работы, в 1988 году была опубликована полная спецификация CLOS. CLOS должен:
  • представлять собой стандартное расширение языка, включающее все наиболее полезные свойства существующей объектно-ориентированной парадигмы;
  • обеспечить эффективный и гибкий интерфейс программиста, позволяющий реализовать большинство прикладных задач;
  • проектироваться как расширяемый протокол, так, чтобы можно было изменять его поведение, тем самым стимулируя дальнейшие исследования в области объектно-ориентированного программирования .
Обзор характеристик CLOS можно найти в табл. 4. Не поддерживая непосредственно механизм долгоживущих объектов, CLOS имеет расширения с протоколом метаобъектов, реализующих этот механизм .

Абстракции

Переменные экземпляра

Методы экземпляра

Переменные класса

Методы класса

Да

Да

Да

Да

Инкапсуляция

Переменных

Методов

Чтение, запись, доступ

Открытые

Модульность

Разновидности модулейПакет

Иерархии

Наследование

Шаблоны

Метаклассы

Множественное

Нет

Да

Типизация

Сильная типизация

Полиморфизм

Возможна

Да (множественный)

Параллельность

МногозадачностьДа

Сохраняемость

Долгоживущие объектыНет
Таблица 4. CLOS. [1]

Ada

В 1983 году под эгидой Министерства Обороны США был создан язык Ada. Язык замечателен тем, что очень много ошибок может быть выявлено на этапе компиляции. Кроме того, поддерживаются многие аспекты программирования, которые часто отдаются на откуп операционной системе (параллелизм, обработка исключений). В 1995 году был принят стандарт языка Ada 95, который развивает предыдущую версию, добавляя в нее объекно-ориентированность и исправляя некоторые неточности. Оба этих языка не получили широкого распространения вне военных и прочих крупномасштабных проектов (авиация, железнодорожные перевозки). Основной причиной является сложность освоения языка и достаточно громоздкий синтаксис. Непосредственными предшественниками Ada являются Pascal и его производные, включая Euclid, Lis, Mesa, Modula и Sue. Были использованы некоторые концепции ALGOL-68, Simula, CLU и Alphard. Разработчики Ada прежде всего беспокоились о:
  • надежности и эксплуатационных качествах программ;
  • программировании как разновидности человеческой деятельности;
  • эффективности.
В табл. 5 приведены основные характеристики языка Ada с точки зрения объектного подхода.

Абстракции

Переменные экземпляра

Методы экземпляра

Переменные класса

Методы класса

Да

Да

Нет

Нет

Инкапсуляция

Переменных

Методов

Открытые, закрытые

Открытые, закрытые

Модульность

Разновидности модулейПакет

Иерархии

Наследование

Шаблоны

Метаклассы

Нет (входит в Ada9x)

Да

Нет

Типизация

Сильная типизация

Полиморфизм

Да

Нет (входит в Ada9x)

Параллельность

МногозадачностьДа

Сохраняемость

Долгоживущие объектыНет
Таблица 5. Ada. [1]

Eiffel

Автор Eiffel Бертран Мейер (Bertrand Meyer) создавал не только язык объектно- ориентированного программирование, но и инструмент проектирования программ. Несмотря на сильное влияние Simula, Eiffel - вполне самостоятельный объектно- ориентированный язык со своей собственной средой разработки. Eiffel поддерживает динамическое связывание и статическую типизацию, тем самым обеспечивая гибкость интерфейсов классов в сочетании с безопасным использованием типов. В Eiffel есть несколько важных черт, поддерживающих более жесткий стиль программирования, в том числе параметризованные классы, утверждения и исключения. Мейер считает, что обобщенные классы хорошо дополняют наследование, учитывая горизонтальный уровень общности; новые классы на одном уровне иерархии можно создавать, используя тип в качестве параметра, а не плодя практически одинаковые подклассы. Неотъемлемой частью языка являются пред- и постусловия, то есть утверждения, которые должны выполняться при входе в метод и выходе из него. Нарушение утверждения вызывает исключительную ситуацию. Ее можно перехватить, обработать и попробовать вызвать тот же метод еще раз. Eiffel поощряет хорошее программирование, добротную спецификацию классов, сильную типизацию и повторное использование, как через наследование, так и через параметризацию. Формальная трактовка исключительных ситуаций позволяет жестко специфицировать интерфейсы классов при реализации. Eiffel предоставляет законченную среду разработки программ, включая специальный редактор с выделением синтаксиса, генератор документации, библиотеки классов и броузер. Кроме того, поддерживаются средства управления кодом и сборкой программ. Свойства языка показаны в табл. 6.

Абстракции

Переменные экземпляра

Методы экземпляра

Переменные класса

Методы класса

Да

Да

Нет

Нет

Инкапсуляция

Переменных

Методов

Закрытые

Открытые, закрытые

Модульность

Разновидности модулейБлок (unit)

Иерархии

Наследование

Шаблоны

Метаклассы

Множественное

Да

Нет

Типизация

Сильная типизация

Полиморфизм

Да

Да

Параллельность

МногозадачностьНет

Сохраняемость

Долгоживущие объектыНет
Таблица 6. Eiffel. [1]

Java

С 1995 года стал широко распространяться новый объектно-ориентированный язык программирования Java, ориентированный на сети компьютеров и, прежде всего, на Internet. Синтаксис этого языка напоминает синтаксис языка C++, однако эти языки имеют мало общего. Java интерпретируемый язык: для него определены внутреннее представление (bytecode) и интерпретатор этого представления, которые уже сейчас реализованы на большинстве платформ. Интерпретатор упрощает отладку программ, написанных на языке Java, обеспечивает их переносимость на новые платформы и адаптируемость к новым окружениям. Он позволяет исключить влияние программ, написанных на языке Java, на другие программы и файлы, имеющиеся на новой платформе, и тем самым обеспечить безопасность при выполнении этих программ. Эти свойства языка Java позволяют использовать его как основной язык программирования для программ, распространяемых по сетям (в частности, по сети Internet).

Object Pascal

Object Pascal создавался сотрудниками компании Apple Computer (некоторые из которых были участниками проекта Smalltalk) совместно с Никлаусом Виртом (Niklaus Wirth), создателем языка Pascal. Object Pascal известен с 1986 года и является первым объектно-ориентированным языком программирования, который был включен в Macintosh Programmer's Workshop (MPW), среду разработки для компьютеров Macintosh фирмы Apple. В этом языке нет методов класса, переменных класса, множественного наследования и метаклассов. Эти механизмы исключены специально, чтобы сделать язык простым для изучения начинающими "объектными" программистами. В табл. 2 приведены общие характеристики Object Pascal.

Абстракции

Переменные экземпляра

Методы экземпляра

Переменные класса

Методы класса

Да

Да

Нет

Нет

Инкапсуляция

Переменных

Методов

Открытые

Открытые

Модульность

Разновидности модулейМодуль (unit)

Иерархии

Наследование

Шаблоны

Метаклассы

Одиночное

Нет

Нет

Типизация

Сильная типизация

Полиморфизм

Да

Да (одиночный)

Параллельность

МногозадачностьНет

Сохраняемость

Долгоживущие объектыНет
Таблица 2. Object Pascal. [1] В последние годы этот язык стал очень популярен благодаря системе Delphi фирмы Borland.

Система визуального объектно-ориентированного проектирования Delphi.

Появление Delphi не могло пройти незамеченным среди многочисленных пользователей компьютера. Оценки экспертов, изучающих возможности этого нового продукта фирмы Borland, обычно окрашены в восторженные тона. Основное достоинство Delphi состоит в том, что здесь реализованы идеи визуального программирования. Среда визуального программирования превращает процесс создания программы в приятное и легко понимаемое конструирование приложения из большого набора графических и структурных примитивов. Система Delphi позволяет решать множество задач, в частности:  Создавать законченные приложения для Windows самой различной направленности: от чисто вычислительных и логических, до графических и мультимедиа.  Быстро создавать (даже начинающим программистам) профессионально выглядящий оконный интерфейс для любых приложений.  Создавать мощные системы работы с локальными и удаленными базами данных  Создавать справочные системы (файлы .hlp) для своих приложений и мн. др. Delphi Ц чрезвычайно быстро развивающаяся система. Первая версия Ц Delphi 1.0 была выпущена в феврале 1995 г. А затем новые версии выпускались ежегодно. Каждая последующая версия Delphi дополняла предыдущую. Большинство версий Delphi выпускается в нескольких вариантах: Standart Ц стандартном, Professional Ц профессиональном, Client/Server Ц клиент/сервер, Enterprise Ц разработка баз данных предметных областей. Различаются варианты в основном разным уровнем доступа к системам управления базами данных. Последние варианты - Client/Server и Enterprise, в этом отношении наиболее мощные. Delphi - это комбинация нескольких важнейших технологий:  Высокопроизводительный компилятор в машинный код  Объектно-ориентированная модель компонент  Визуальное (а, следовательно, и скоростное) построение приложений из программных прототипов  Масштабируемые средства для построения баз данных Структура экрана в среде Delphi. После вызова Delphi в Windows появляются несколько окон (рис 1.): v главное окно, v окно формы, v окно инспектора объектов, v окно дерева объектов, v окно кода программы. Рис1. Структура экрана в среде Delphi. Рассмотрим расположенное в верхней части экрана графическое меню системы Delphi, составленное из пиктограмм. В левой части графического меню находится панель инструментов. Инструменты выполняют некоторые команды главного меню - такое дублирование часто практикуется в инструментальных средах. На этой панели есть, в частности, кнопка сохранения проекта на диске, кнопка открытия проекта, кнопка запуска программы на выполнение. Следующая часть графического меню - палитра компонентов, устроенная в виде наборов пиктограмм. Совокупность наборов составляет библиотеку визуальных компонентов (VCL). Имеется несколько категорий компонентов, каждая из которых связана со своей закладкой. С помощью палитры компонентов мы будем создавать экземпляры компонентов (или объекты) в форме. Для того чтобы разместить объект в форме, нужно "щелкнуть" на соответствующей кнопке палитры и затем щелкнуть внутри окна формы: в указанное место формы будет вставлен объект - экземпляр компонента выбранного типа. Окно Object Inspector - это окно, отображающее свойства либо формы, либо размещенного на форме объекта. В нашем случае текущим компонентом является форма, поэтому на рисунке окно свойств показывает свойства формы. Окно свойств имеет две закладки - Properties и Еvents, с помощью которых можно получить в окне строки (поля) для задания, соответственно, свойств компонента (т. е. объекта или формы) и его реакции на различные события. Свойство определяет атрибут компонента, например, размер кнопки или шрифт метки. Событие означает, например, такие действия, как щелчок мыши на кнопке или закрытие окна. Окно дерева объектов появилось в версии 6 и предназначено для наглядного отображения связей между отдельными объектами, размещенными на активной форме или в активном модуле данных. Окно кода программы предназначено для создания и редактирования текста программы. Первоначально оно содержит минимальный исходный текст. Проекты Delphi. Проект Delphi состоит из форм, модулей, установок параметров проекта, ресурсов и т.д. Вся эта информация размещается в файлах. Многие из этих файлов автоматически создаются Delphi, когда вы строите ваше приложение. Ресурсы, такие как битовые матрицы, пиктограммы и т.д., находятся в файлах, которые вы получаете из других источников или создаете при помощи многочисленных инструментов и редакторов ресурсов, имеющихся в вашем распоряжении. Кроме того, компилятор также создает файлы. Создающиеся в процессе проектирования файлы показаны в табл. 7. Главной частью приложения является файл проекта (.dpr), содержащий код на языке Object Pascal, с которого начинается выполнение программы и который обеспечивает инициализацию других модулей. Он создается и модифицируется Delphi автоматически в процессе разработки приложения. Имя, которое дается файлу проекта в процессе сохранения, становится именем исполняемого файла.
Файл проекта (.dpr)Этот текстовый файл используется для хранения информации о формах и модулях. В нем содержатся операторы инициализации и запуска программ на выполнение
Файл модуля (.pas)Каждой создаваемой вами форме соответствует текстовый файл модуля, используемый для хранения кода. Можно создавать модули, не связанные с формами. Многие из функций и процедур Delphi хранятся в модулях.
Файл формы (.dfm)Это двоичный или текстовый файл, который создается Delphi для хранения информации о формах. Каждому файлу формы соответствует файл модуля (.pas)
Файл параметров проекта(.dfo)В этом файле хранятся установки параметров проекта
Файл ресурсов(.res)Этот бинарный файл содержит используемую проектом пиктограмму и прочие ресурсы
Файлы резервных копий (.~dpr, .~dfm, .~pas)Это соответственно файлы резервных копий для файлов проекта, формы и модуля. Если что-то безнадежно испорчено в проекте, можно соответственно изменить расширения этих файлов и таким образом вернуться к предыдущему не испорченному варианту
Файл конфигурации окон (.dsk)Файл хранит конфигурацию всех окон среды разработки
Исполняемый файл (.exe)Это исполняемый файл приложения. Он является автономным исполняемым файлом, для которого больше ничего не требуется, если только не используются библиотеки, содержащиеся в DLL, OCX и т.д.
Объектный файл модуля (.dcu)Это откомпилированный файл модуля (.pas), который компонуется в окончательный исполняемый файл.
Таблица 7. Файлы, создающиеся в процессе проектирования. [8] В настоящее время вышла уже 7-я версия системы Delphi. За рекордно короткий срок она стала одной из самых популярных систем программирования в мире. Многие разработчики в мире твердо ориентируются на использование Delphi как на инструмент, позволяющий создавать высокоэффективные клиент-серверные приложения.

IV.Заключение

Объектно-ориентированные системы (ООС), под которыми понимаются все языки программирования, инструментарии и методологии, поддерживающие технологию объектно-ориентированного программирования, пользуются огромной популярностью в мире. Это обусловлено рядом их преимуществ: 1. ООС позволяют справляться со сложностью. Первое важное преимущество объектно-ориентированных систем вытекает из природы их связи с реальным миром. Разработчик может спроектировать физическую систему в программную, первоначально задав все важные физические объекты и соответствующие им программные объекты. Группы взаимосвязанных физических объектов отображаются в классы, которые можно организовать в иерархию, начиная с общих классов и добавляя к ним специализированные подклассы. Процедуры, общие для нескольких классов, находятся в их общем суперклассе и наследуются ими. Объектно-ориентированный подход уменьшает концептуальный разрыв между реальным миром и компьютерной моделью. Он позволяет аналитикам и проектировщикам ясно понимать структуру системы. Поэтому сегодня объектно- ориентированные системы используются для моделирования сложных физических систем на производстве, в телекоммуникациях, а также в военном и оборонном комплексах. 2. ООС предназначены для изменений. Второе преимущество объектно-ориентированных систем обусловлено способом взаимосвязи объектов через сообщения. Гибкость объектно-ориентированных систем является неоспоримым преимуществом для пользователей в быстро меняющихся средах, например, в технологии программирования. Так, Computer Science Corporation использовал объектно- ориентированный язык Smalltalk для разработки продукта Design Generator. Компания отмечает, что благодаря использованию объектно-ориентированной технологии, разработчики программ имеют возможность быстро реагировать на новые течения рынка в условиях возрастающей конкуренции. 3. Объекты могут использоваться несколько раз. Третье преимущество объектно-ориентированных систем заключается в том, что классы могут наследовать процедуры от других классов. Компания может составить библиотеки наиболее часто используемых классов, содержащих процедуры, предназначенные для специфических нужд и применяющихся в последующих прикладных задачах. В прошлом библиотеками подпрограмм пользовались разработчики ПО для решения стандартных задач типа математических вычислений. Объектно-ориентированные системы дают более широкий спектр многократного использования текстов программ. Библиотеки объектов также можно приобретать от независимых поставщиков. В настоящее время наиболее активно покупают такие библиотеки классов для создания пользовательских интерфейсов с пиктограммами. Разработка и написание таких интерфейсов с нуля - задача нелегкая. Компании типа Apple и Whitewater Group поставляют инструментарии для быстрого построения таких интерфейсов на основе нескольких базовых классов типа Window, Menu, ScrollBar и Icon. Пользователи могут использовать как эти классы, так и их подклассы, добавляющие в интерфейс, например, специальные пиктограммы. 4. ООС легко поддерживаются. Четвертое преимущество заключается в способе комплектования объектно-ориентированных программных модулей. Традиционное ПО состоит из данных и процедур, осуществляющих доступ и изменение данных. Данные и процедуры комплектуются отдельно, поэтому изменение структуры данных влияет на различные модули, написанные разными пользователями. В объектно-ориентированной системе данные и процедуры рассматриваются вместе как часть одного пакета - объекта. При изменении данных все задействованные процедуры легко идентифицируются и изменяются одновременно. Поскольку изменение распространяется только на одну область системы, его побочное влияние на всю систему уменьшается. Вследствие этих преимуществ, а также еще ряда причин, ООП является в настоящее время самым перспективным, распространенным и эффективным направлением в программировании.

Литература и ссылки

1. Г. Буч лОбъектно-ориентированный анализ и проектирование с примерами приложений на С++ Пер. с англ. - М.: Бином; СПб.: Невский диалект, 1999. 2. В. Фаронов лDeiphi 6 - СПб.: Питер, 2002. 3. Э. Ишкова лC++ начала программирования - М.: Бином, 2001. 4. С. Немнюгин, Л. Перколаб лИзучаем Turbo Pascal - СПб.: Питер, 2002. 5. С. С. Гайсарян лОбъектно-ориентированное проектирование () 7. Принципы объектно-ориентированного программирования Ц ArticlesD Лекции по Delphi () 10. Стили программирования () 14. Lections on Computer Science: Object Oriented Languages. Лекция 1. Объектно-ориентированные языки программирования. Сравнение с традиционными языками () 15. Патрикеев Ю. Н. лОбъектно-ориентированное проектирование () 16. Патрикеев Ю. Н. лОбъектно-ориентированное программирование на Borland C++ () 17. А. Легалов лИтоги экспансии объектно-ориентированной парадигмы ()

Приложение

В качестве иллюстрации к вышеизложенному материалу, к курсовой работе прилагается программа, разработанная в объектно-ориентированной среде Delphi. Целью этого проекта была систематизация разных видов информации, относящейся к одной теме Ц в данном случае информация о различных видах птиц. Средства визуальной объектно-ориентированной среды Delphi позволили сделать эту работу быстро и с минимальными затратами. Ниже приводится краткое описание проекта, сам исполняемый файл прилагается на компакт-диске. Разработка проекта начиналась с главной формы (рис2.) На форме размещены всего три объекта : Label1 класса TLabel (метка), Image1 класса TImage (изображение) и кнопка Button1 класса TButton. С помощью несложного кода посредством этой кнопки производится переход на вторую форму: procedure TForm1.Button1Click(Sender: TObject); begin Form1.Hide; Form2.Show; end; Рис 2. Главная форма проекта лBirds В компоненты этой формы входит объект ListBox1 (рис3.) класса TListBox Ц список, с помощью которого осуществляется дальнейший переход к остальным формам программы: procedure TForm2.ListBox1DblClick(Sender: TObject); begin Form2.Hide; (Birds[ListBox1.ItemIndex])^.Show; end; Здесь используется массив Birds, который был описан ранее: const numBirds = 15; Birds: array[0..numBirds-1] of ^TForm = (@Vorob, @Cov, @Popug, @Raksh, @Gol, @Gus, @Pog, @DHP, @Zur, @Kul, лплплл@Kur, @Dyat, @DK, @Golub, @Ping); Рис3. Компонент ListBox1. В остальных формах программы с помощью несложных компонентов было размещено довольно большое количество информации: графической, текстовой и звуковой.