Объектно-ориентированное программирование: различия между версиями
Содержимое удалено Содержимое добавлено
Freezeman (обсуждение | вклад) |
Freezeman (обсуждение | вклад) →Общие замечания: исправлены списки |
||
Строка 2:
== Общие замечания ==
Объектно-ориентированная парадигма программирования не нова. Её истоки восходят к Симуле-67, хотя первая полная реализация была в Smalltalk-80. ООП стало популярным во второй половине 80-х в таких различных языках, как Си-плюс-плюс, Objective C (другое расширение C), Object и Турбо Паскаль (Turbo Pascal), CLOS (ОО-расширение Лиспа), Eiffel, Ада (в её последних воплощениях) и недавно
Ключевые черты ООП хорошо известны: ▼
# Первая — '''инкапсуляция''' — это определение классов — пользовательских типов данных, объединяющих своё содержимое в единый тип и реализующих некоторые операции или методы над ним. Классы обычно являются основой модульности, инкапсуляции и абстракции данных в языках ООП.▼
# Вторая ключевая черта, — '''наследование''' — есть способ определения нового типа, наследуя элементы (содержание и методы) существующего и модифицируя или расширяя их. Это способствует выражению специализации и генерализации.▼
▲# Первая
▲# Вторая ключевая черта,
# Третья черта, известная как '''полиморфизм''', позволяет единообразно ссылаться на объекты различных классов (обычно внутри некоторой иерархии). Это делает классы ещё более удобными и делает программы, основанные на них, легче для расширения и поддержки.
Инкапсуляция, наследование и полиморфизм
''Алан Кей'' в свое время вывел пять основных черт языка Smalltalk - первого удачного ОО языка:▼
# '''Все является объектом.''' Объект как хранит информацию, так и способен ее преобразовывать. В принципе любой элемент решаемой задачи (дом, собака, услуга, химическая реакция, город, космический корабль и т.д.) может представлять собой объект. Объект можно представить себе как швейцарский нож: он является набором различных ножей и "открывашек" (хранение), но в то-же самое время им мы можем резать или открывать что-либо (преобразование).▼
# '''Программа - совокупность объектов, указывающих друг-другу что делать.''' Для обращения к одному объекту другой объект "посылает ему сообщение". Как вариант возможно и "ответное сообщение". Программу можно представить себе как совокупность к примеру 3 объектов: писателя, ручки и листа бумаги. Писатель "посылает сообщение" ручке, которая в свою очередь "посылает сообщение" листу бумаги - в результате мы видим текст (посыл сообщения от листа к писателю).▼
# '''Каждый объект имеет свою собственную "память" состоящую из других объектов.''' Таким образом программист может скрыть сложность программы за довольно простыми объектами. К примеру дом (достаточно сложный объект) состоит из дверей, комнат, окон, проводки и отопления. Дверь в свою очередь может состоять из собственно двери, ручки, замка и петель. Проводка так-же состоит из проводов, розеток и к примеру щитка.▼
▲# '''Все является объектом.''' Объект как хранит информацию, так и способен ее преобразовывать. В принципе любой элемент решаемой задачи (дом, собака, услуга, химическая реакция, город, космический корабль и
▲# '''Программа
▲# '''Каждый объект имеет свою собственную
# '''У каждого объекта есть тип.''' Иногда тип называют еще и классом. Класс (тип) определяет какие сообщения объекты могут посылать друг-другу.
# '''Все объекты одного типа могут получать одинаковые сообщения.''' К примеру у нас есть 2 объекта: синяя и красная кружки. Обе разные по форме и материалу. Но из обеих мы можем пить (или не пить, если они пустые). В данном случае кружка
Самое лаконичное описание объекта предложил ''Буч'':
▲# '''Все объекты одного типа могут получать одинаковые сообщения.''' К примеру у нас есть 2 объекта: синяя и красная кружки. Обе разные по форме и материалу. Но из обеих мы можем пить (или не пить, если они пустые). В данном случае кружка - это тип объекта.
▲Самое лаконичное описание объекта предложил ''Буч'': "Объект обладает ''состоянием'', ''поведением'' и ''индивидуальностью''".
== Контроль во время компиляции и во время выполнения ==
|