Файл: История и развитие методологии объектно -ориентированного программирования. Сферы применения.pdf
Добавлен: 04.04.2023
Просмотров: 159
Скачиваний: 3
СОДЕРЖАНИЕ
Глава 1. История развития программирования
1.1 Исторические аспекты появления и развития программирования
1.2 Исторические этапы развития объектно-ориентированного программирования
Глава 2. Парадигма объектно-ориентированного программирования
2.1 Методология и основные понятия объектно-ориентированного программирования
2.2 Сферы применения объектно-ориентированного программирования
3.1 Эволюция объектно-ориентированных языков программирования
3.2 Достоинства и недостатки объектно-ориентированного программирования
Объектно-ориентированное программирование появилось в результате развития процедурного программирования. Основоположниками объектного подхода в программировании считаются норвежцы Оле Джохан Дал и Кристен Нюгорт, авторы языка Simula. [5]
История Simula началась в 1962 году с проекта Simulation Language, предназначенного для программного моделирования метода Монте-Карло. Нюгорт предложил сотрудничество Оле Джохана Дала, коллеге по экспериментальной группе Министерства обороны Норвегии. В 1965 году у авторов зародилась идея объединить данные с процедурами, их обрабатывающими. После успешного обсуждения возможностей Simula I на саммите НАТО в 1966 г. было решено продолжить его совершенствование. В язык вошли новые средства моделирования и имитации мультипроцессной работы. Авторы также придумали термины «класс» и «объект». В то же время возникла и технология наследования. Создатели Simula ввели в язык возможность использования разными классами общих свойств посредством указания названия класса в виде префикса. После публичного анонса новая технология вызвала интерес в Дании, Германии и СССР. У нас в конце 60–х появилась реализация Simula для УРАЛа-16. Алан Кей внимательно изучал идеи, заложенные в Simula и еще два оригинальных языка — LISP, применявшийся для задач искусственного интеллекта, и LOGO, предназначенный для обучения базовым понятиям программирования.[12]
В ходе ознакомления с данными языками программирования Кей придумал новую концепцию разработки, в соответствии с которой набор последовательно выполняющихся инструкций мог быть заменен на многомерную среду взаимодействия объектов, общающихся друг с другом путем асинхронного обмена сообщениями. В результате чего появлялась возможность поддержки подобной среды не одним, а множеством компьютеров, объединенных в сеть. Правда, для своего времени эта идея оказалась слишком революционной.[3]
Позже в 1972 г. Кей реализовал свои идеи в новом объектном языке SmallTalk, первоначально названном им Biological System и смоделированном на Бейсике, а затем реализованном на ассемблере.
Именно тогда был предложен термин «объектно-ориентированное программирование» (ООП). Заложенные в SmallTalk идеи ООП до сих пор остались непревзойденными в других языках и системах. [11]
В 1974 году Марвин Мински, родоначальник теории искусственного интеллекта, предложил идею фрейма, отделившего описание класса (структуры) объекта от его конкретного представления (экземпляра) и быстро завоевавшего популярность в языках искусственного интеллекта. Фрейм стал прямым предшественником современного понятия объектов в С++.
В 1976 году Кринстен Нюгорн создал новый язык BETA, в котором ввел концепцию шаблонов — более высокого уровня абстракций, нежели объекты.
В 1980 году Бьерн Страуструп, продолживший дело своих коллег из лаборатории Bell, дополнил язык C концепцией классов, основанной на фреймах и объектных механизмах Simula.
В 1982 году в Мехико прошла 8-я Международная конференция по сверхбольшим базам данных (БД) (VLDB), на которой была предложена концепция объектно-ориентированных БД и рассматривались вопросы расширения существовавших языков запросов к БД.
В 1983 году. Страуструп дал своему творению окончательное название С++. [11]
В 1986 году в Портленде прошла первая всемирная конференция по объектно-ориентированным системам программирования. Возможно, именно прозвучавшие на ней доклады оказали главное влияние на Уильяма Аткинсона, инженера Apple, который через год после этого спроектировал систему HyperCard, прообраз современных визуальных сред быстрой разработки. Эффективность новой технологии оказалась столь высокой, что уже в 1989 году одиннадцать компаний: 3Com, American Airlines, Canon, Data General, Hewlett-Packard, Philips Telecommunications, Sun Microsystems и Unisys, основали группу OMG (Object Management Group), призванную формировать индустриальные стандарты на объектное программирование и упрощать интеграцию приложений с помощью универсальных кросс-платформенных технологий.
OMG первым делом приступила к выработке единого стандарта компонентной модели CORBA (Common Object Request Broker Architecture), набора спецификаций, определяющих способы объектно-ориентированного взаимодействия компонентов промежуточного уровня в гетерогенных средах без привязки к конкретным языкам программирования. С самого начала CORBA нацеливалась на поддержку крупных, индустриальных проектов, и этот подход со временем себя полностью оправдал.[11]
В 1992 году вышел стандарт CORBA 1.0, определяющий главные аспекты функционирования CORBA-систем. В него были включены базовое описание объектной модели, наборы программных интерфейсов поддержки CORBA-систем, а также декларативный язык определения интерфейсов Interface Definition Language (IDL), созданный OMG для описания распределенных интерфейсов.
В 1994 году опубликован стандарт CORBA 2.0, который быстро получил массовое признание, так как представлял собой богатый и глубоко проработанный набор документов и охватывал большинство востребованных на рынке задач. В нем были исправлены недостатки прежней версии, в результате чего CORBA 2.0 начал поддерживать транзакции и понимать универсальную кодировку Unicode, а также появился набор средств обеспечения безопасности и взаимодействия COM- и CORBA-объектов.
Гради Буч и Джеймс Румбах из Rational Software объединили две методологии визуального моделирования Booch и OMT и создали на их основе новый язык UML (Unified Modeling Language).[10]
В 1995 году Sun Microsystems выкладывает в свободный доступ элемент технологии Java — среду HotJava, поддерживающую мобильный код, разработку проекта Green, которая к тому времени считалась в Sun практически пропащей, если бы не развитие Сети. Новинку сразу же лицензирует Netscape Communication, а следом за ней к Java проявляют коммерческий интерес десятки компаний, в том числе Microsoft, IBM, Adobe, Borland, Lotus, Oracle. Корпорация Borland выпустила первую версию среды быстрой визуальной разработки Delphi 1, основанную на концепции библиотек стандартных компонентов. [8]
В 1997 году Sun Microsystems разрабатывает концепцию Enterprise JavaBeans — технологию создания корпоративных Java-компонентов, которые можно исполнять на серверах приложений, реализуя логику крупных, хорошо масштабируемых и защищенных систем на платформенно-независимой основе. [12]
В 2000 году Microsoft анонсирует новую объектную платформу .NET и новый язык программирования C#, объединяющий лучшие свойства С++ и Java. Он был предложен Microsoft во многом в противовес Java.
В 2001 году OMG выпускает спецификацию CORBA 3.0. Она дополнена возможностями асинхронного обмена сообщениями, разработки систем реального времени и создания встраиваемых систем. В ней появились подключаемые компоненты, поддержка XML и средства интеграции различных Интернет-технологий. Особый акцент в третьей версии CORBA сделан на эффективном взаимодействии с Java.
В 2002 году Опубликована последняя официальная версия CORBA 3.0.2.[11]
История объектно-ориентированного программирования, началась относительно недавно. Однако за такой небольшой промежуток времени, программистам удалось достичь немалых успехов в этой области. В настоящее время объектно-ориентированное программирование стало неотъемлемой частью в области разработки программного обеспечения.
Глава 2. Парадигма объектно-ориентированного программирования
2.1 Методология и основные понятия объектно-ориентированного программирования
Суть методологии объектно-ориентированного программирования заключается в том, что программное приложение, как и окружающий нас мир, должно состоять из объектов, обладающих собственными свойствами и поведением. Каждый объект объединяет данные и процедуры обработки этих данных и относится к определенному классу. Объектно-ориентированный подход основан на:
• выделении классов объектов;
• установлении свойств и методов обработки;
• создании иерархии классов, наследовании свойств объектов и методов их обработки. [9]
Объектно-ориентированный подход позволяет сократить объем и трудоемкость разработки программ, имеющих дело с множеством связанных друг с другом объектов. [7]
Таким образом объектно-ориентированное программирование — это методология программирования, которая основана на представлении программы в виде совокупности объектов, каждый из которых является реализацией определенного класса (типа особого вида), а классы образуют иерархию, основанную на принципах наследуемости. При этом объект характеризуется как совокупностью всех своих свойств и их текущих значений, так и совокупностью допустимых для данного объекта действий.[5]
Несмотря на то что в различных источниках делается акцент на те или иные особенности внедрения и применения ООП, три основных (базовых) понятия ООП остаются неизменными. К ним относятся:
• наследование (Inheritance)
Объекты могут наследовать характеристики и поведение того, что мы называем порождающие, родительские объекты (или предки).
Процесс, с помощью которого один тип наследует характеристики другого типа, называется наследованием. Наследник называется порожденным (дочерним) типом, а тип, которому наследует дочерний тип, называется порождающим (родительским) типом.[6]
• инкапсуляция (Encapsulation)
Объекты моделируют характеристики и поведение элементов мира, в котором мы живем. Они являются окончательной абстракцией данных.
Объекты содержат вместе все свои характеристики и особенности поведения. Отношения частей к целому и взаимоотношения между частями становятся понятнее тогда, когда все содержится вместе.[5]
• полиморфизм (Polymorphism)
Полиморфизм означает, что один и тот же метод выполняется по-разному для различных объектов.
Эти понятия являются основополагающими в объектно-ориентированном программировании. В отличие от процедурного программирования, где необходимо описывать каждое действие, объектно-ориентированный подход оставляет позволяет объекту самостоятельно решать, как вести себя в ответ на поступивший вызов. Достаточно в стандартной форме поставить перед ним задачу и получить ответ.[12]
Программа считается объектно-ориентированной при соблюдении следующих концепций:
• объектно-ориентированное программирование использует в качестве базовых элементов классы, порождающие объекты;
• в процессе выполнения программы может одновременно использоваться несколько объектов, порожденных от одного класса (экземпляров реализации класса);
• классы организованы иерархически (иерархия означает «быть частью»).
Класс - представляет собой объединяющую концепцию набора объектов, имеющих общие характеристики. Класс является описанием того, как будет выглядеть и вести себя его представитель. Поэтому класс проектируют как образование, отвечающее за создание своих новых представителей (экземпляров или объектов).
Объекты ООП можно классифицировать подобно реальным объектам. В мире программного обеспечения объекты относятся к одному или разным классам. Объектам одного класса присущи общие свойства. Иными словами, класс определяет: свойства и поведение, характеризующие объект, а также, что особенно важно, те сообщения, на которые отвечает объект. Когда один объект оказывает влияние на поведение другого объекта, он не делает это непосредственно, а просит другой объект изменить себя, используя некоторую дополнительную информацию. Называется это "посылка сообщения". [10]
Признаки — это видимые извне свойства класса. Объект обнаруживает признаки тогда, когда предоставляет непосредственный доступ к внутренней переменной или возвращает значение с помощью метода.[9]
Объект — это структурированная переменная типа класс, содержащая всю информацию о некотором физическом предмете или реализуемом в программе понятии. Все объекты являющиеся представителями одного класса обладают одинаковым набором операций. Объект, как логическая единица, содержит следующие данные и операции (методы с кодом алгоритма) в отдельном участке памяти:
• поля объекта (или атрибуты исходных данных), значения которых определяют текущее состояние объекта;
• методы объекта, которые реализуют действия (выполнение алгоритмов) в ответ на их вызов в виде преданного сообщения;
• свойства — часть методов, которые определят поведение объекта, то есть его реакцию на внешние воздействия.[8]
Объекты позволяют в программе моделировать реальный мир с помощью: существительных, глаголов и прилагательных, взятых из предметной области.
К объекту моно применить такое понятие, как поведение — это действия, выполняемые объектом в ответ на сообщение или на изменение состояния. Проще говоря, это действия выполняемые объектом.