Файл: История и развитие методологии объектно-ориентированного программирования. Сферы ее применения..pdf
Добавлен: 20.05.2023
Просмотров: 343
Скачиваний: 4
Введение
Информационные и компьютерные технологии, программирование в частности, являются наиболее динамичной областью современной науки, находящейся под постоянным влиянием прогресса. Усложнение концепций, лежащих в основе программных и физических компонентов, а также появление новых версий операционных систем, программного обеспечения, усовершенствование моделей процессоров и комплектующих электронно-вычислительных машин неизбежно приводит к созданию новых методов, парадигм программирования. Ярким примером подобных парадигм является объектно-ориентированное программирование (ООП). Своё начало объектно-ориентированное программирование берёт аж в 60-х годах предыдущего (XX) века, с появлением таких языков программирования, разработанных норвежскими учеными Оле-Йоханом Далем и Кристеном Нюгором, как SIMULA I и SIMULA 67, которые включали в себя большую часть концепций ООП, однако не могли называться самостоятельными языками объектно-ориентированного программирования. Далее, в 1970-х годах, под влиянием SIMULA, был создан первый самостоятельный язык объектно-ориентированного программирования Smalltalk, развивший концепцию ООП и повлиявший на множество языков программирования, таких как Java, Python и Ruby. На сегодняшний день языки ООП получили большое распространение, многие из которых являются наиболее оплачиваемыми в среде фриланса (свободной наёмной работы). Объектно-ориентированное программирование используется во многих сферах, а именно: веб-программирование (PHP, Java), системное администрирование, а так же создание программного обеспечения, такого как растровый графический редактор «GIMP», пакет для создания трёхмерной компьютерной графики «Blender» (Python). Никто не будет сомневаться, что каждый уважающий себя программист и разработчик должен знать об основах методологии ООП и о сферах, где оно применяется.
1. Что такое объектно-ориентированное программирование
Объектно-ориентированное программирование является парадигмой, результатом слияния идей, понятий об инкапсуляции, полиморфизме и наследственности. Это своего рода «три кита» ООП. Главная идея, основа методологии объектно-ориентированного программирования заключается в том, что экземпляром класса является не прототип, а непосредственно объект.[1]
Понятие "объект" впервые было использовано более 20 лет назад при конструировании компьютеров с descriptor-based и capability-based архитектурами. В этих работах делались попытки отойти от традиционной архитектуры фон Неймана и преодолеть барьер между высоким уровнем программной абстракции и низким уровнем ЭВМ. По мнению сторонников этих подходов, тогда были созданы более качественные средства, обеспечивающие: лучшее выявление ошибок, большую эффективность реализации программ, сокращение набора инструкций, упрощение компиляции, снижение объема требуемой памяти. Ряд компьютеров имеет объектно-ориентированную архитектуру: Burroughs 5000, Plessey 250, Cambridge CAP, SWARD, Intel 432, Caltech's СОМ, IBM System/38, Rational R1000, BiiN 40 и 60.[2] Появление в ООП отдельного понятия класса закономерно вытекает из желания иметь множество объектов со сходным поведением. Класс в ООП — это в чистом виде абстрактный тип данных, создаваемый программистом. С этой точки зрения объекты являются значениями данного абстрактного типа, а определение класса задаёт внутреннюю структуру значений и набор операций, которые над этими значениями могут быть выполнены.[3] Желательность иерархии классов (а значит, наследования) вытекает из требований к повторному использованию кода — если несколько классов имеют сходное поведение, нет смысла дублировать их описание, лучше выделить общую часть в общий родительский класс, а в описании самих этих классов оставить только различающиеся элементы.
Понятие «Инкапсуляция» подразумевает под собой такую способность системы, как объединение данных и методов, работающих с ними в классе.[4]
Свойством наследственности является способность одного вида классов заимствовать (наследовать) поля и методы других классов, а так же возможность добавлять к ним свои. Преимуществом данной способности является использование проверенного, готового кода, что непосредственно позволяет ускорить процесс разработки.[5]
Полиморфизмом называется способность объекта, которая позволяет ему использовать методы производного класса, не существующего на момент создания базового. Проще говоря, один и тот же код используется для объектов разных классов.[6] Естественным завершением реализации этих идей, начавшейся с языка Simula и развитой в последующих языках в 1970-1980-е годы, стало сравнительно недавнее появление таких языков, как Smalltalk, Object Pascal, C++, CLOS, Ada и Eiffel. Эти языки получили название объектных или объектно-ориентированных.
Другими словами,: "Если процедуры и функции - глаголы, а данные - существительные, то процедурные программы строятся из глаголов, а объектно-ориентированные - из существительных" [7]. По этой же причине структура программ малой и средней сложности при объектно-ориентированном подходе представляется графом, а не деревом, как в случае алгоритмических языков. Кроме того, уменьшена или отсутствует область глобальных данных. Данные и действия организуются теперь таким образом, что основными логическими строительными блоками наших систем становятся классы и объекты, а не алгоритмы.[8]
Распространение методологии ООП связано с процессом разработки программ. В частности, процедурно-ориентированная декомпозиция программ уступила место объектно-ориентированной, при которой в качестве отдельных структурных единиц программы рассматриваются не процедуры и функции, а классы и объекты с соответствующими свойствами и методами. Как следствие, программа перестала быть последовательностью предопределенных на этапе кодирования действий, а преобразовалась в событийно управляемую. Последнее обстоятельство доминирует и при разработке широкого круга современных приложений. В этом случае каждая программа представляет собой бесконечный цикл ожидания заранее определенных событий. Инициаторами событий могут быть другие программы или пользователи, а при наступлении отдельного события программа выходит из состояния ожидания и реагирует на него вполне адекватным образом.[9]
Методы структурного проектирования помогают упростить процесс разработки сложных систем за счет использования алгоритмов как готовых строительных блоков. Аналогично, методы объектно-ориентированного проектирования созданы, чтобы помочь разработчикам применять мощные выразительные средства объектного и объектно-ориентированного программирования, использующего в качестве блоков классы и объекты.
Но в объектной модели отражается и множество других факторов. Как показано во врезке ниже, объектный подход зарекомендовал себя как унифицирующая идея всей компьютерной науки, применимая не только в программировании, но также в проектировании интерфейса пользователя, баз данных и даже архитектуры компьютеров.
Причина такой широты в том, что ориентация на объекты позволяет нам справляться со сложностью систем самой разной природы.[10]
ООП часто называют новой парадигмой программирования. Другие известные парадигмы программирования: директивная (структурное программирование – Pascal, C), логическая – Prolog, функциональная – Lisp, Effel. Парадигмы в программировании определяют, как проводить вычисления, как работа, выполняемая компьютером, должна быть структурирована и организована.[11]
Таким образом, Объектно-ориентированное программирование, некогда являвшимся небольшим экспериментальным проектом, на сегодняшний день является одной из часто используемых парадигм программирования в сфере информационных и компьютерных технологий.
Рис. 1.0 Топология языков конца третьего поколения.
2. Топология языков объектно-ориентрованного программирования.
Источник: Гради Буч, Объектно-ориентированный анализ и проектирование с примерами приложений на С++.
История ООП
Как было сказано в ведении, SIMULA I и SIMULA 67 были созданы в конце шестидесятых годов двадцатого века и являются самыми первыми языками объектно-ориентированного программирования. Алану Кею, который в то время работал в Университете Юты, понравилась функциональность языка SIMULA. В его голове зародилась идея о персональном компьютере, который смог бы предоставлять графически-ориентированные приложения.[12]
По его мнению, язык наподобие SIMULA мог бы предоставить удобный способ создания подобных приложений для людей, не являющихся специалистами в данной сфере. Алан Кей продал свою концепцию научно-исследовательскому центру Xerox Parc, позднее в начале 1970-х, команда, под руководством Алана Кея создала первый персональный компьютер, названный «Dynabook». Smalltalk создавался, как объектно-ориентированный язык программирования, разработанный, как программная составляющая Dynabook. Smalltalk существует и по сей день, несмотря на то, что он не является широко распространённым в коммерческой среде языком программирования.[13] Идея объектно-ориентированного программирования получила широкое распространение в 1970-х и начале 1980-х годов двадцатого века. Бьёрн Страуструп интегрировал ООП в язык C. В результате появился язык, названный «C++», это был первый язык объектно-ориентированного программирования, получивший широкое коммерческое распространение. [14]В начале 1990-х группа в Sun Microsystems, под руководством Джеймса Гослинга разработала упрощенную версию C++, названную Java, изначально предполагавшуюся, как язык программирования для Video-on-Demand приложений. Оригинальный проект не получил успеха, пока группа не сменила назначение языка, представив его, как язык для веб-программирования. Язык получил широкое распространение, так как интернет на тот момент активно развивался. [15] Язык Java оказал большое влияние на создание еще языка объектно-ориентированного программирования Python, который был разработан нидерландским программистом Гвидо ван Россумом.[16] Python используется при создании межсетевых протоколов (SMTP, HTTP, FTP, XML-RPC, POP, IMAP, CGI-программировании), а также при создании программного обеспечения и разработке веб-приложений.[17] Язык Python получил большое коммерческое распространение и использовался при создании таких проектов, как
файловые хостинги Dropbox и Яндекс Диск, торрент-трекер BitTorrent, растровый редактор Gimp, центр приложений Ubuntu (Ubuntu Software Center).
Одним из языков, оказавших влияние на Python, был Dylan (Dynamic Language), разработанный 1992-м году компанией Apple, поддерживающий парадигмы объектно-ориентированного и функционального программирования. Dylan нацелен на быструю разработку программ и приложений, преимущественно для операционной системы Mac OS.[18]
Dylan поддерживает полиморфизм, множественное наследование и многие другие парадигмы, присущие методологии объектно-ориентированного программирования.[19]
Одним из новейших языков программирования является C#, унаследовавший синтаксис от C++ и Java[20], созданный компанией Microsoft относительно недавно (в 2000-ном году). Данный язык объектно-ориентированного программирования в основном используется для создания приложений для платформы Microsoft .NET Framework.
Java и C# во многом схожи, так как синтаксис обоих языков во многом наследует синтаксис C++, в связи с этим, Java и C# являются конкурирующими языками, применяющихся, зачастую в одних и тех же сферах.[21]
Одним из популярных, широко используемых языков объектно-ориентированного программирования является Delphi, некогда носивший название Object Pascal (объектно-ориентированный Паскаль).
Delphi применяется при разработке приложений для Windows и Linux.
Язык Delphi был создан в 1995-м под руководством Андерса Хейлсберга.[22] Одним из языков, повлиявших на Delphi, был Eiffel, вышедший в 1986-м году, разработанный Бертраном Мейером и обладающий алголоподобным синтаксисом.
Примечателен Eiffel тем, что в данном языке впервые был реализован метод контрактного программирования. [23]
Контрактное программирование представляет собой метод проектирования программного обеспечения, предполагающий, что проектировщик должен определить формальные, точные и верифицируемые спецификации интерфейсов для компонентов системы.[24]
Подводя итог, касательно истории, можно сказать, что на данный момент существует множество языков объектно-ориентированного программирования, ООП получило широкое распространение во всех сферах и на данный момент используется повсеместно, от системного администрирования до разработки программного обеспечения.
Методология ООП