Введение в объектно-ориентированное программирование

0
0

С введением понятия «объект» разработчики получили возможность описывать структуру программных систем, используя термины «реального мира», и поддерживать системы с миллионами строк кода, что было невозможно при использовании процедурной парадигмы. Процедурное программирование не могло обеспечить должный уровень развития и поддержки сложных программных систем в банковской, телекоммуникационной и других сферах деятельности, где требования к программам постоянно усложнялись. Стиль (парадигма) программирования, в основе которого лежит понятие класса и объекта, разрабатывался как развитие процедурной парадигмы, которая перестала быть эффективной по мере развития сложности программных проектов, и получил название «объектно-ориентированное программирование» (ООП).

История развития

Впервые объектно-ориентированное программирование начало применяться в языке Simula 67, который оказал большое влияние на развитие таких языков, как Lisp и Smalltalk. Но наибольшее развитие ООП получил в середине 90-х, когда был создан «классик ООП» C++, работу которого с объектами переняли популярные среды программирования Delphi и VisualFoxPro. ООП продолжает развиваться, и среди новых парадигм можно выделить аспектно-ориентированную и субъектно-ориентированную парадигму. Каждый объектно-ориентированный язык расширяет базовые понятия ООП уникальными дополнениями и расширениями, в зависимости от специфики использования. В этой статье мы рассмотрим реализацию ООП в среде программирования Delphi и языке веб-разработки PHP.

Основные концепции ООП

Парадигма ООП состоит из трех основных концепций: инкапсуляция, полиморфизм и наследование.

объектно ориентированное программирование

Инкапсуляция (encapsulation)

Механизм объединения кода и данных внутри объекта, а также их защиты от внешних изменений. Внутри объекта данные и код могут быть открытыми (public) для доступа и модификации другими объектами и закрытыми (private) для внешних изменений.

объектно ориентированное программирование delphi

Полиморфизм (polymorphism)

Важнейший элемент концепции ООП, позволяющий использовать единое наименование для функций, выполняющих похожие действия. Вначале понять смысл полиморфизма сложно, поэтому приведем простой пример. В любом языке программирования для каждого типа чисел, например, в «классическом» C для нахождения модуля числа нам нужно использовать для целых чисел функцию abs(), для длинных целых labs(), для чисел с плавающей точкой fabs(). Это приводит к необходимости помнить синтаксис множества функций и дополнительной нагрузке на память и процессор компьютера. Объектно-ориентированное программирование, используя механизм полиморфизма, позволяет написать свою функцию определения модуля modul() и использовать ее в арифметических вычислениях, не задумываясь о типе чисел. Просто пишем в выражении modul() и получаем правильный ответ. Плюс сокращение кода программы и нагрузки системы. Еще один пример полиморфизма представлен на рисунке – общий класс «Кривая» (Shape) является «родителем» для круга, прямоугольника и звезды.

объектно ориентированное программирование на php

Наследование (inheritance)

Механизм ООП, позволяющий объекту иметь (наследовать) методы другого объекта. Точнее, объект получает (наследует) все основные свойства своего «предка» и добавляет к ним методы, свойственные только ему. «Наследник» объекта получит в «наследство» методы уже двух объектов и т. д. Наследование еще называют иерархией классов. Использование наследования позволяет просто управлять большими объемами информации и программного кода. Далее вы можете увидеть, как объекты наследуют общие свойства от родительского класса «Автомобиль».

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

Основные элементы классов и объектов в ООП

Все языки, поддерживающие объектно-ориентированное программирование, имеют одинаковую трактовку понятия класса и объекта. Класс - тип данных для описания свойств и работы «реального» объекта, такого как банковский счет. Объект - отдельный экземпляр класса. Метод - программный код, изменяющий поведение объекта или его состояние в зависимости от значения его свойств. Модификатор доступа - метод, разделяющий элементы класса на открытые и закрытые поля. Конструктор - метод, выполняющийся первым после инициализации объекта и приводящий его в исходное состояние. Деструктор - метод, вызываемый при удалении объекта. На схеме показано взаимодействие элементов класса.

Взаимодействие элементов класса

Реализация ООП в Delphi

В основе среды разработки лежит подмножество языка Pascal с элементами ООП - Object Pascal. Среда и язык Delphi были первой графической средой разработки программ для MS Windows. Объектно-ориентированное программирование delphi есть набор стандартных абстрактных классов, инкапсулирующих в себе определенные элементы Windows-программы, такие как графический интерфейс, работа с оперативной памятью и т. д. Delphi оказал значительное влияние на развитие всех объектно-ориентированных языков, особенно на язык C# для среды разработки .NET компании Microsoft. Последняя версия Delphi 8 работает только с .NET.

Иерархия стандартных классов Delphi

Иерархия классов в Delphi

TObject – «родитель» всех классов Delphi. Класс обеспечивает всех своих «потомков» поддержкой функций объектно-ориентированного программирования, и его конструктор обеспечивает запуск и корректную работу программы в Windows. TPersistent – обеспечивает объектам взаимодействие на уровне потоков передачи данных. Он передает потоки данных и обеспечивает доступ к Инспектору объектов. TComponent – позволяет создавать любые невизуальные объекты и обеспечивает их взаимодействие со всей средой разработки. Именно он дает возможность работы с объектами и компонентами программы в визуальной среде разработки. Его потомок TGraphicControl создает различные неоконные элементы интерфейса, например, графические фоны и т. д. TControl – все объекты, отображаемые на экране (окна, списки, кнопки, формы т. д.) являются его потомками. Инкапсулирует в себе работу с функциями графического интерфейса Windows. TWinControl – обеспечивает работу с окнами программы. Его потомок TCustomControl дает возможность создавать такие элементы управления, как текстовые редакторы, списки выбора.

Реализация ООП в PHP

PHP является одним из самых популярных языков для веб-разработки и первоначально представлял собой полностью процедурный язык программирования. Поэтому объектно-ориентированное программирование на php появилось позднее, начиная с четвертой версии. Необходимость поддерживать оба стиля программирования – процедурный и объектно-ориентированный - привела к тому, что элементы ООП до сих пор являются дополнением, а не основой языка. Но ситуация стремительно меняется в сторону объектного PHP. Версия PHP 5 полностью поддерживает все элементы ООП, и разработчик имеет полную свободу в создании собственных классов и объектов, в отличие от Delhi, где разработчик так или иначе должен использовать стандартные классы со всеми их возможными недостатками. Синтаксис объектных элементов PHP не представляет сложности программистам, ранее работающим на C++/# и Delphi.

Развитие ООП

Объектно-ориентированная парадигма программирования продолжает развиваться и используется во многих элементах программных систем, например, в специализированных базах данных, поддерживающих объектную модель данных, и при разработке приложений для планшетов и мобильных телефонов. Среди новых объектных языков можно выделить Python, широко использующийся для разработки интернет-систем, и Go– многофункциональный язык программирования от компании Google.