Файл: Основные понятия объектно-ориентированного программирования.pdf
Добавлен: 03.04.2023
Просмотров: 200
Скачиваний: 2
Рисунок 7 – Создание экземпляров класса
В языке Java инкапсуляция реализуется при помощи четырех модификаторов доступа:
- Public – Публичный доступ. Данные, имеющие такой модификатор, доступны везде;
- Default – Доступ к данным по умолчанию. Данные, имеющие такой модификатор, доступны в пределах пакета;
- Protected – Защищенный доступ. Данные, имеющие такой модификатор, доступны из дочерних классов и в пределах пакета.
- Private – Приватный доступ. Данные, имеющие такой модификатор, доступны только внутри самого класса [3, c.106-110].
Наследование в языке Java осуществляется при помощи следующих аспектов [4, c.87-88]:
- Объявления переменных в базовом классе;
- Объявления и инициализации полей производного класса;
- Возможности переопределения методов, унаследованных от базового класса;
- Вызова исходных методов базового класса.
Чтобы подключить базовый класс, следует использовать ключевое слово «extends». Концепция полиморфизма в Java позволяет переопределять или перегружать наследуемые методы путем переписывания измененных операторов метода с сохранением исходной сигнатуры, идентичной базовому классу. Компилятор копирует в дочерних классах наследуемые поля, а также перестраивает вызовы наследуемых методов. При этом сохраняется возможность получения доступа к исходным методам базового класса при помощи ключевого слова «super» даже после их переопределения (рисунок 8) [4, c.86-90].
Рисунок 8 – Пример наследования в языке Java
Реализация ООП в языке C++
С++ – промышленный, мультипарадигмальный, компилируемый язык программирования с поддержкой объектно-ориентированной парадигмы, основанный на языке C [7, с.21]. Исходный код программы, написанный на данном языке, компилируются в исполняемый файл [7, c.22]. С++ используется повсеместно: в разработках операционных систем и их приложений, игр, сетевых приложений, драйверов периферийных устройств, встраиваемых систем и программного обеспечения микроконтроллеров [9, c.30].
Рисунок 9 – Пример инкапсуляции и работы с классами и в языке C++
Для объявления класса используется ключевое слово «class», после которого следует имя класса. Для объявления членов класса, также необходимо перед их именами указывать модификаторы доступа: public, private или protected, таким образом, в языке C++ осуществляется инкапсуляция. Член класса с модификатором «public» доступен везде, где этот объект используется. Модификатор «private» открывает доступ только внутри класса, а protected открывает доступ для производных классов. Для настройки закрытых переменных используются функции для инициализации (как правило, называемые get и set) [7, c.332]. Для объявления экземпляра класса указывается имя базового класса и имя объекта после него. Вызов функций класса осуществляется при помощи конструкции, состоящей из имени экземпляра класса и имени функции класса, записанные через точку [9, c.452] (рисунок 9).
Наследование в языке программирования C++ осуществляется при помощи следующей конструкции: объявляется имя новой дочерней переменной после ключевого слова «class», далее, после двоеточия, указывается модификатор доступа и имя базового класса (рисунок 10) [9, c.599].
Рисунок 10 – Пример наследования в языке C++
Для инициализации переменных класса, часто используют функции с открытым доступом, называемые конструкторами. Конструктор имеет то же имя, что и класс. Для уничтожения объектов используется обратная конструкторам процедура – деструктор, объявление которого происходит после знака «~» [9, c.63]. При объявлении конструктора происходит выделение памяти для переменных класса, а при объявлении деструктора, память, выделенная для переменной, освобождается.
Реализация ООП в языке C#
С# (C Sharp) – мультипарадигмальный, объектно-ориентированный язык программирования, продукт корпорацией Microsoft, предназначенный для разработки программного обеспечения, работающего на платформах .NET Framework (использующий среду Common Language Runtime), Mac OS, iOS и Android [8, c.3] [10].
Рисунок 10 – пример использования классов, инкапсуляции и наследования в языке C#
C# имеет C-подобный синтаксис [10]. Для объявления класса используется ключевое слово «class», после которого указывается имя класса, а в теле класса объявляются его поля и методы, имеющие свои модификаторы доступа [8, c.73] [10]. Элементы класса в языке C# могут иметь четыре разновидности модификаторов доступа: public, private, protected и internal. Элементы класса с модификатором public доступны вне класса, в отличие от private, когда элементы доступны только внутри методов класса. Модификатор protected открывает доступ к полям и методам внутри базового и его производных классов, а internal – в пределах всего файла. Доступ к инкапсулируемым значениям переменных осуществляется при помощи аксессеров[2] «set» и «get» [5, c.29].
Для объявления дочернего класса следует объявить класс, а затем, указать имя базового класса после двоеточия [8, c.88]. Также для удобства инициализации переменных, следует добавить конструктор с модификатором доступа. Имя конструктора должно совпадать с именем класса при объявлении, а переменные указываются в круглых скобках. [10] [8, c.96] (см. рисунок 11).
ЗАКЛЮЧЕНИЕ
Любая технология разработки программного обеспечения, какая бы она универсальная не была, может быть использована только для выполнения определенного круга задач, для которых она предназначена. Это стало причиной появления мультипарадигмальных языков программирования, когда язык способен поддерживать несколько парадигм. Объектно-ориентированное программирование, будучи инструментом разработки программного обеспечения, тоже имеет свои преимущества и недостатки.
Существует множество ситуаций, когда применение ООП нецелесообразно. С одной стороны, объектно-ориентированное программирование увеличивает абстракцию и позволяет повторно использовать уже написанный код в виде библиотек классов. В то же время, использование таких библиотек подразумевает излишние затраты времени на их изучение и документирование. Например, язык Java достаточно прост в освоении, особенно для разработчиков, знакомых с синтаксисом языка C. Библиотека Java Core, по своему объему, едва превышает стандартную библиотеку какого-либо иного промышленного языка программирования. Но для построения сетевых приложений, отвечающих современным стандартам Enterprise-систем, разработчик должен знать и уметь применять на практике множество дополнительных библиотек и фреймворков[3]. Данный факт является причиной весьма высокого порога вхождения для языка Java относительно других языков.
Если переменные и функции классов наследуются на уровнях в сложной иерархической системе, а обработка сообщений распределена по методам разных классов, это затрудняет анализ существующих систем, а в некоторых случаях, например в Enterprise-приложениях, вообще становится невозможным построение UML[4] визуализации всей системы. Также, по причине сложной организации программного обеспечения, увеличивается аппаратная часть системы (подключаются дополнительные сервера), в связи с чем, производительность подобных систем снижается.
Несмотря на вышеуказанные недостатки, объектно-ориентированное программирование, на сегодняшний день, является одной из самых востребованных методологий программирования, потому как данный подход весьма близок к человеческому восприятию мира, которое подразумевает наличие в этом мире объектов, взаимодействующих друг с другом.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
- ГОСТ 19781-90 Обеспечение систем обработки информации программное. Термины и определения. Дата введения 01.01.1992. // Опубликован: М.: Стандартинформ, 2010 год. Официальное издание.
- ГОСТ 28397-89. Языки программирования. Термины и определения. Дата введения 01.01.1991. // Опубликован: М.: Стандартинформ, 2005 год. Официальное издание.
- Васильев, Алексей Николаевич. Программирование на Java для начинающих / Алексей Васильев. – Москва: Издательство «Э», 2017. – 704 с.
- Льюис, Д. Самоучитель Java 7: Пер. с. нем. / Д. Льюис, П. Мюллер. – СПБ.: БХВ-Петербург, 2016. – 464 с.
- Сартасов, Е. М. Объектно-ориентированное программирование: учебное пособие / Е.М. Сартасов. – Челябинск: Издательский центр ЮУрГУ, 2014. – 54с.
- Эккель Брюс. Философия Java. 4-е полное изд. – СПб.: Питер, 2015 – 1168 с.: ил. – (Серия «Классика computer science»)
- Эллайн А. C++ От ламера до программера. – СПб.: Питер, 2015. – 480 с.
- Albahari J., Albahari B., C# 6.0 in a Nutshell. Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472. 2016. 1115p.
- Stroustrup, Bjarne. The C++ programming language / Bjarne Stroustrup. — Fourth edition. 1360 pages. United States on recycled paper at Edwards Brothers Malloy in Ann Arbor, Michigan. QA76.73.C153 S77. 2013.
10. Официальный сайт «Microsoft Corporation» // Visual C# (Инструкции по С#). [Электронный ресурс]. URL: https://docs.microsoft.com/ru-ru/previous-versions/visualstudio/visual-studio-2008/zkxk2fwf(v%3dvs.90) (Дата обращения: 21.11.2018г.)
Приложение 1
Таблица базовых типов данных в языках программирования с
C-подобным синтаксисом.
Источник: «Сартасов, Е. М. Объектно-ориентированное программирование: учебное пособие / Е.М. Сартасов. – Челябинск: Издательский центр ЮУрГУ, 2014. – 54с.»
Приложение 2
Базовые операторы в языках программирования с
C-подобным синтаксисом.
Таблица составлена на основе данных электронного ресурса: Официальный сайт «Microsoft Corporation» // Visual C# (Инструкции по С#). [Электронный ресурс]. URL: https://docs.microsoft.com/ru-ru/previous-versions/visualstudio/visual-studio-2008/zkxk2fwf(v%3dvs.90) (Дата обращения: 21.11.2018г.)
-
Примечание: в данном случае, термин «интерфейс» используется в контексте механизма взаимодействия классов, а не как абстрактный класс. ↑
-
Аксессор – неявный метод для получения инкапсулируемых данных, от англ. «access» – доступ. ↑
-
(англ.) Framework – база для построения архитектуры приложения ↑
-
UML – Unified Modeling Language – язык моделирования, состоящий из диаграмм для наглядной демонстрации структуры иерархии классов. ↑