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

Автор работы: Пользователь скрыл имя, 12 Апреля 2012 в 23:21, реферат

Краткое описание

Использование объектно-ориентированной методологии не ограничено каким-либо одним языком программирования - она применима к широкому спектру объектных и объектно-ориентированных языков. Наряду с анализом и проектированием, несомненно, важны особенности конкретного языка программирования, поскольку, в конечном счете, наши конструкции должны быть выражены на каком-то языке.

Содержание работы

Введение 3
Сущность объектно-ориентированного подхода к программированию. 5
Модульное программирование 7
Нисходящее программирование 7
Пошаговое программирование 8
Структурное программирование 9
Понятия объекта, класса объектов 9
Основные понятия объектно-ориентированного программирования: инкапсуляция, наследование и полиморфизм. 10
Примеры языков объектно-ориентированного программирования: 12
Object Pascal 12
C++. 13
Common Lisp Object System (CLOS). 15
Ada. 16
Заключение. 19
Список литературы: 20

Содержимое работы - 1 файл

морковкина.docx

— 54.70 Кб (Скачать файл)

Объект - структурированная переменная, содержащая всю информацию о некотором физическом предмете или реализуемом в программе понятии.

Класс - описание множества таких объектов и выполняемых над ними действий.

Основные понятия объектно-ориентированного программирования: инкапсуляция, наследование и полиморфизм

 

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

Объектно-ориентированное  программирование (ООП) это совокупность понятий (класс, объект, инкапсуляция, полиморфизм, наследование), приемов  их использования при проектировании программ, а Си++ - инструмент этой технологии.

Строгое следование технологии ООП предполагает, что любая функция в программе  представляет собой метод для  объекта некоторого класса. Это не означает, что нужно вводить в  программу какие попало классы ради того, чтобы написать необходимые  для работы функции. Наоборот, класс  должен формироваться в программе  естественным образом, как только в  ней возникает необходимость  описания новых физических предметов  или абстрактных понятий (объектов программирования). С другой стороны, каждый новый шаг в разработке алгоритма также должен представлять собой разработку нового класса на основе уже существующих. В конце концов вся программа в таком виде представляет собой объект некоторого класса с единственным методом run (выполнить). Именно этот переход (а не понятия класса и объекта, как таковые) создает психологический барьер перед программистом, осваивающим технологию ООП.

Программирование "от класса к классу" включает в себя ряд новых понятий. Прежде всего, это - инкапсуляция данных, то есть логическое связывание данных с конкретной операцией. Инкапсуляция данных означает, что данные являются не глобальными - доступными всей программе, а локальными - доступными только малой ее части. Инкапсуляция автоматически подразумевает защиту данных. Для этого в структуре class используется спецификатор раздела private, содержащий данные и методы, доступные только для самого класса. Если данные и методы содержатся в разделе public, они доступны извне класса. Раздел protected содержит данные и методы, доступные из класса и любого его производного класса. Наличие последних позволяет говорить об иерархии классов, где есть классы - родители - шаблоны для создания классов - потомков. Объекты, полученные из описания класса, называют экземплярами этого класса.

Вторым  по значимости понятием является наследование. Новый, или производный класс может быть определен на основе уже имеющегося, или базового. При этом новый класс сохраняет все свойства старого: данные объекта базового класса включаются в данные объекта производного, а методы базового класса могут быть вызваны для объекта производного класса, причем они будут выполняться над данными включенного в него объекта базового класса. Иначе говоря, новый класс наследует как данные старого класса, так и методы их обработки. Если объект наследует свои свойства от одного родителя, то говорят об одиночном наследовании. Если же объект наследует атрибуты от нескольких базовых классов, то говорят о множественном наследовании. Простой пример наследования - определение структуры, отдельный член которой является ранее определенной структурой.

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

Полиморфный метод в Си++ называется виртуальной функцией, позволяющей получать ответы на сообщения, адресованные объектам, точный вид которых неизвестен. Такая возможность является результатом позднего связывания. При позднем связывании адреса определяются динамически во время выполнения программы, а не статически во время компиляции, как в традиционных компилируемых языках, в которых применяется раннее связывание. Сам процесс связывания заключается в замене виртуальных функций на адреса памяти.

Виртуальные функции определяются в родительском классе, а в производных классах  происходит их доопределение и для них создаются новые реализации. При работе с виртуальными функциями сообщения передаются как указатели, которые указывают на объект вместо прямой передачи объекту. Виртуальные функции используют таблицу для адресной информации, которая инициализируется при выполнения при помощи конструктора.

Примеры языков объектно-ориентированного программирования:

Object Pascal

 

Происхождение

Object Pascal создавался сотрудниками компании Apple Computer (некоторые из которых были участниками проекта Smalltalk) совместно с Никлаусом Виртом (Niklaus Wirth), создателем языка Pascal. Непосредственным предшественником Object Pascal является Clascal (объектно-ориентированная версия Pascal для компьютера Lisa). Object Pascal известен с 1986 года и является первым объектно-ориентированным языком программирования, который был включен в Macintosh Programmer′s Workshop (MPW), среду разработки для компьютеров Macintosh фирмы Apple. Для MPW создана библиотека классов, называемая МасАрр, являющаяся основой для создания прикладных приложений, отвечающих требованиям к интерфейсу пользователя Macintosh.

Обзор

Шмукер (Schmucker) утверждает, что "Object Pascal - это "скелет" объектно-ориентированного языка [В последние годы этот язык стал очень популярен благодаря системе Delphi фирмы Borland. - Примеч. ред.]. В нем нет методов класса, переменных класса, множественного наследования и метаклассов. Эти механизмы исключены специально, чтобы сделать язык простым для изучения начинающими "объектными" программистами".

 

Характеристики Object Pascal:

Абстракции

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

Да Да Нет Нет

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

Переменных Методов

Открытые Открытые

Модульность

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

Модуль (unit)

Иерархии

Наследование Шаблоны Метаклассы

Одиночное Нет Нет

Типизация

Сильная типизация Полиморфизм

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

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

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

Нет

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

Долгоживущие объекты

Нет


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) появились шаблоны (параметризованные классы) и обработка исключений. Комитет ANSI по C++ (X3J16) недавно одобрил предложения по введению пространств имен (что соответствует нашему обозначению категорий классов) и проверки типов во время исполнения.

Первые компиляторы C++ строились  на основе препроцессора для языка С, названного cfront. Поскольку этот транслятор создавал промежуточный код на С, он позволил очень быстро перенести C++ практически на все UNIX-системы. Сейчас почти на всех платформах созданы (в том числе коммерческие) "настоящие" компиляторы C++.

Обзор

Страуструп пишет: "C++ создавался с целью избавить автора и его  друзей от необходимости программировать  на ассемблере, С или других современных  языках такого уровня. Главной задачей  было придумать язык, на котором  удобно писать хорошие программы  и с которым программисту приятно  работать. C++ никогда не проектировался на бумаге. Его проектирование, документирование и реализация выполнялись одновременно". C++ исправил многие недостатки С и ввел описания классов, контроль типов, перегрузку функций, управление памятью, постоянные типы, ссылки, встраиваемые функции, производные классы и виртуальные функции.

 

Характеристики C++ :

Абстракции

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

Да Да Да Да

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

Переменных Методов

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

Модульность

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

файл

Иерархии

Наследование Шаблоны Метаклассы

Множественное Да Нет

Типизация

Сильная типизация Полиморфизм

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

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

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

Непрямая (посредством классов)

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

Долгоживущие объекты

Нет


Common Lisp Object System (CLOS)

 

Происхождение

Существуют буквально десятки диалектов языка Lisp, включая MacLisp, Standard Lisp, SpiceLisp, S-1 Lisp, ZetaLisp, Nil, InterLisp и Scheme. В начале 80-х годов под воздействием идей объектно-ориентированного программирования возникла серия новых диалектов Lisp, многие из которых были ориентированы на представление знаний. Успех в стандартизации Common Lisp стимулировал попытки стандартизировать объектно-ориентированные диалекты в 1986 году.

Идея стандартизации была поддержана летней конференцией ACM по Lisp и функциональному программированию 1986 года, в результате чего была создана специальная рабочая группа при комитете X3J13 ANSI (комитет по стандартизации Common Lisp). Поскольку новый диалект должен был стать надстройкой над Common Lisp, он получил название Common Lisp Object System (Объектная система Common Lisp) или, сокращенно, - CLOS. Возглавил комитет Дэниел Бобров (Daniel Bobrow), а его членами стали Соня Кин (Sonya Keene), Линда де Мичил (Linda DeMichiel), Патрик Дассад (Patrick Dussud), Ричард Габриель (Richard Gabriel), Джеймс Кемпф (James Kempf), Грегор Кисазлес (Gregor Kicazles) и Дэвид Мун (David Moon).

Серьезное влияние на проект CLOS оказали  языки NewFlavors и CommonLoops. После двухлетней работы, в 1988 году была опубликована полная спецификация CLOS.

Обзор

Кип отмечает, что в проекте CLOS ставились  три основные цели. CLOS должен:

  • представлять собой стандартное расширение языка, включающее все наиболее полезные свойства существующей объектно-ориентированной парадигмы;
  • обеспечить эффективный и гибкий интерфейс программиста, позволяющий реализовать большинство прикладных задач;
  • проектироваться как расширяемый протокол, так, чтобы можно было изменять его поведение, тем самым стимулируя дальнейшие исследования в области объектно-ориентированного программирования.

Не поддерживая  непосредственно механизм долгоживущих объектов, CLOS имеет расширения с  протоколом метаобъектов, реализующих этот механизм.

 

Характеристики  CLOS:

Абстракции

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

Да Да Да Да

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

Переменных Методов

Чтение, запись, доступ Открытые

Модульность

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

Пакет

Иерархии

Наследование Шаблоны Метаклассы

Множественное Нет Да

Типизация

Сильная типизация Полиморфизм

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

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

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

Да

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

Долгоживущие объекты

Нет

Информация о работе Языки объектно-ориентированного программирования