Объектно-ориентированное программирование: различия между версиями

 
Ключевые черты ООП хорошо известны:
# Первая — '''инкапсуляция''' — это определение классов — пользовательских типов данных, объединяющих своё содержимое в единый тип и реализующих некоторые операции или методы над ним. Классы обычно являются основой модульности, инкапсуляции и абстракции данных в языках ООП.
 
# Вторая ключевая черта, — '''наследование''' — есть способ определения нового типа, наследуя элементы (содержание и методы) существующего и модифицируя или расширяя их. Это способствует выражению специализации и генерализации.
 
# Третья черта, известная как '''полиморфизм''', позволяет единообразно ссылаться на объекты различных классов (обычно внутри некоторой иерархии). Это делает классы ещё более удобными и делает программы, основанные на них, легче для расширения и поддержки.
 
Инкапсуляция, наследование и полиморфизм — фундаментальные свойства, требуемые от языка, претендующего называться объектно-ориентированным (языки, не имеющие наследования и полиморфизма, но имеющие только классы, обычно называются основанными на классах). Различные ОО языки используют совершенно разные подходы. Мы можем различать ОО языки, сравнивая механизм контроля типов, способность поддерживать различные программные модели и то, какие объектные модели они поддерживают.
 
''Алан Кей'' в свое время вывел пять основных черт языка Smalltalk - первого удачного ОО языка:
# '''Все является объектом.''' Объект как хранит информацию, так и способен ее преобразовывать. В принципе любой элемент решаемой задачи (дом, собака, услуга, химическая реакция, город, космический корабль и т.д.) может представлять собой объект. Объект можно представить себе как швейцарский нож: он является набором различных ножей и "открывашек" (хранение), но в то-же самое время им мы можем резать или открывать что-либо (преобразование).
 
# '''Программа - совокупность объектов, указывающих друг-другу что делать.''' Для обращения к одному объекту другой объект "посылает ему сообщение". Как вариант возможно и "ответное сообщение". Программу можно представить себе как совокупность к примеру 3 объектов: писателя, ручки и листа бумаги. Писатель "посылает сообщение" ручке, которая в свою очередь "посылает сообщение" листу бумаги - в результате мы видим текст (посыл сообщения от листа к писателю).
 
# '''Каждый объект имеет свою собственную "память" состоящую из других объектов.''' Таким образом программист может скрыть сложность программы за довольно простыми объектами. К примеру дом (достаточно сложный объект) состоит из дверей, комнат, окон, проводки и отопления. Дверь в свою очередь может состоять из собственно двери, ручки, замка и петель. Проводка так-же состоит из проводов, розеток и к примеру щитка.
 
# '''У каждого объекта есть тип.''' Иногда тип называют еще и классом. Класс (тип) определяет какие сообщения объекты могут посылать друг-другу.
 
# '''Все объекты одного типа могут получать одинаковые сообщения.''' К примеру у нас есть 2 объекта: синяя и красная кружки. Обе разные по форме и материалу. Но из обеих мы можем пить (или не пить, если они пустые). В данном случае кружка - это тип объекта.
 
Самое лаконичное описание объекта предложил ''Буч'': "Объект обладает ''состоянием'', ''поведением'' и ''индивидуальностью''".
 
== Контроль во время компиляции и во время выполнения ==
46

правок