Шаг 54.
Объектно-ориентированное программирование

    На этом шаге мы рассмотрим предпосылки появления объектно-ориентированного программирования.

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

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

    Существует достаточно большое количество определений понятия объект. Г.Буч под объектом понимает осязаемую сущность, которая четко проявляет свое поведение[1]. Стефик и Бобров определяют объект как сущности, объединяющие процедуры и данные, так как они производят вычисления и сохраняют свое локальное состояние [2]. Джонс уточняет это определение: "В объектном подходе акцент переносится на конкретные характеристики физической или абстрактной системы, являющейся предметом программного моделирования… Объекты обладают целостностью, которая не должна - а, в действительности, не может быть нарушена. Объект может менять только состояние, вести себя, управляться или становиться в определенное отношение к другим объектам. Иначе говоря, свойства, которые характеризуют объект и его поведение, остаются неизменными. Например, лифт характеризуется теми неизменными свойствами, что он может двигаться вверх и вниз, оставаясь в пределах шахты… Любая модель должна учитывать эти свойства лифта, так как они входят в его определение" [3].

    Йонесава и Токоро свидетельствуют, что термин объект появился в начале 70-х годов практически независимо в различных областях, связанных с компьютерами. Объектами назывались компоненты системы или фрагменты представления знаний [4]. По мнению Леви объектно-ориентированный подход был связан со следующими событиями:

    К этому следует добавить три момента, оказавшие определенное влияние на становление объектного подхода к программированию. Это:

    Понятие объект впервые было использовано в работах, связанных с созданием компьютеров, архитектура которых отличается от традиционной архитектуры фон Неймана, и применялось для преодоления барьера между высоким уровнем программной абстракции и низким уровнем ЭВМ [5, 6]. Был создан ряд компьютеров, имеющих объектно-ориентированную структуру.

    С объектно-ориентированной архитектурой тесно связаны объектно-ориентированные операционные системы (ОС). Среди первых объектно-ориентированных ОС следует отметить CAP (для компьютера Cambridge CAP), ULCA Secure UNIX (для PDP 11/45 и 11/70) и др.

    Наиболее значительный вклад в развитие объектного подхода был внесен объектно-ориентированными языками программирования. Впервые понятия классов и объектов появились в языке программирования Simula 67. Система Flex и последовавшие за ней диалекты Smalltalk-72, -74, -76, -80, взяв за основу методы Simula, довели их до логического завершения, выполняя все действия на основе классов. В 70-х годах прошлого столетия было создан ряд языков, реализующих идею абстракции данных (Alphard, CLU, Euclid, Gypsy, Mesa, Modula). Затем методы, используемые в языках Simula и Smalltalk, были использованы в традиционных языках высокого уровня. Внесение объектно-ориентированного подхода в C привело к возникновению языков C++, Objective C. На основе языка Pascal возникли Object Pascal, Eiffel и Ada. Появились диалекты LISP, такие, как Flavor, LOOPS и CLOS (Common LISP Object System), с возможностями языков Simula и Smalltalk.

    Развивающиеся достаточно независимо технологии построения баз данных также оказали влияние на развитие объектного подхода, в первую очередь благодаря использованию модели "сущность - явление". В таких моделях, впервые предложенных Ченом [7], моделирование происходит в терминах сущностей, их атрибутов и взаимоотношений.

    Разработчики способов представления данных в области искусственного интеллекта также внесли свой вклад в развитие объектно-ориентированных технологий. В 1975 году Мински предложил теорию фреймов для представления реальных объектов в системах распознавания образов и естественных языков [8]. Фреймы стали использоваться в качестве архитектурной основы в различных интеллектуальных системах.

    Определим теперь объектно-ориентированное программирование.


    В приведенном определении можно выделить три части:

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

    В соответствии с приведенным определением не все языки программирования являются объектно-ориентированными. По мнению Б.Страуструпа, термин "объектно-ориентированный язык" означает, что этот язык имеет средства хорошей поддержки объектно-ориентированного стиля программирования, то есть при программировании на этом языке удобно пользоваться данными средствами. Если написание программ в стиле ООП требует специальных усилий или невозможно совсем, то такой язык не отвечает требованиям ООП [9]. Карделли и Вагнер сформулировали необходимые условия объектно-ориентированного языка программирования:

   


(1) Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений на С++, 2-е изд. - М.: Бином, 1998. - 560 с.
(2) Stefik M., Bobrow D. Object-Oriented Programming: Themes and Variations. AI Magazine. 1986. Vol. 6(4). P. 41.
(3) Jones A. The Object Model: A Conceptual Tool for Structuring Software. Operating Systems. 1979. New York, NY: Springer-Verlag. P. 8.
(4) Yonezawa A., Tokoro M. Object-Oriented Concurrent Programming. Cambridge, MA: The MIT Press. 1987. P. 2.
(5) Myers G. Advances in Computer Architecture. Second Edition. 1982. New York, NY: John Wiley and Sons. P. 58.
(6) Ramamoorthy C., Sheu P. Object-Oriented Systems. IEEE Expert. 1988. Vol. 3(3). P. 14.
(7) Chen P. The Entity-Relationship Model - Toward a Unified View of Data. 1976. ACM Transactions on Database Systems. Vol. 1(1).
(8) Barr A., Feigenbaum E. The Handbook of Artificial Intelligence. 1981. Vol. 1. Los Altos, CA: William Kaufmann. P. 216.
(9) Stroustrup B. What Is Object-Oriented Programming? 1988. IEEE Software. Vol. 5(3). P. 10.
(10) 24. Cardelli L., Wegner P. On Understanding Types, Data Abstraction and Polymorphism. 1985. ACM Computing Surveys. Vol 17(4). P. 481.

    На следующем шаге мы перечислим составные части объектного подхода.




Предыдущий шаг Содержание Следующий шаг