Файл: Основы объекно-ориентированного программирования.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 14.06.2023

Просмотров: 185

Скачиваний: 5

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Полиморфизм это возможность объектов с одинаковой спецификацией иметь различную реализацию.

Язык программирования поддерживает полиморфизм, если классы с одинаковой спецификацией могут иметь различную реализацию — например, реализация класса может быть изменена в процессе наследования[1].

Полиморфизм позволяет писать более абстрактные программы и повысить коэффициент повторного использования кода. Общие свойства объектов объединяются в систему, которую могут называть по-разному — интерфейс, класс.

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

Полиморфизм, может быть, достигнут двумя способами:

  • переопределение метода;
  • перегрузка метода.

Переопределением (override) называют такую перегрузку методов, когда в классах, связанных отношением наследования, существуют методы с одинаковыми именами, количеством и типом параметров[6].

Рассмотрим на примере языка Java, который представлен в приложении 2.

Существует родительский класс A, в нем определен метод message(). В подклассе В родительский метод переопределен.

Запись @Override называется аннотацией и указывает, что метод базового класса должен быть переопределен. Если в базовом классе не окажется метода с аналогичной сигнатурой, то мы получим предупреждение компилятора о том, что метод переопределить невозможно. Аннотация не влияет на переопределение метода, но служит лишь для контроля успешности переопределения. Аннотацию можно удалить, но этого делать не надо, потому что в случае ошибки вместо переопределения будет выполнена перегрузка метода[1].

Таким образом, при переопределении методы должны иметь одинаковые сигнатуры и переопределяться могут только наследованные методы.

Перегрузка метода (overload) означает запись двух или более методов в одном классе с использованием того же имени метода, но параметры передачи отличаются. То есть она позволяет использовать одно и то же имя для нескольких методов с разными сигнатурами[3].

То есть, для перегрузки методов необходимо определить методы с одним и тем же именем, которые отличаются: количеством параметров, типом параметров, последовательностью типов параметров. Так как в процессе компиляции определяется, какой метод следует вызвать, основываясь на этих свойствах. Необходимо отметить, что имена параметров, тип возвращаемого значения и модификатор доступа метода в выборе требуемого метода не участвуют.


Итак, можно сделать вывод, что сущность полиморфизма заключается в том, что методы различных классов могут иметь одинаковые имена, но различное содержание. Это достигается переопределением родительского метода в классе-потомке: В результате родитель и потомок ведут себя по-разному. При этом обращение к одноименным методам различных объектов выполняется аналогично.

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

  • Инкапсуляция - комбинирование записей с процедурами и функциями, манипулирующими полями этих записей, формирует новый тип данных - объект (под записью понимается переменная типа "запись").
  • Наследование - определение объекта и его дальнейшее использование для построения иерархии порожденных объектов с возможностью для каждого порожденного объекта, относящегося к иерархии, доступа к коду и данным всех порождающих объектов.
  • Полиморфизм - присваивание действию одного имени, которое затем совместно используется вниз и вверх по иерархии объектов, причем каждый объект иерархии выполняет это действие способом, именно ему подходящим.

Глава 3. Анализ объектно-ориентированные языков программирования

3.1 C++

История создания С++ начинается с языка С. С++ можно назвать расширенной и улучшенной версией языка С. В сравнении с его предшественником, наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования.

Язык С++ был создан Бьерном Страуструпом в 1979 году в компании Bell Laboratories [5]. Сначала новый язык получил имя «С с классами», но в 1983 году он стал называться С++.

В 1997 году был принят международный стандарт С++, который обеспечил единообразие всех реализаций языка.

Язык С++ является универсальным языком программирования, в дополнение к которому разработан набор разнообразных библиотек.

Необходимо отметить, что он используется практически во всех областях науки, техники и производства.[4] Он позволяет удобно, эффективно и быстро разрабатывать программы, тестировать и изменять их. Его применяют для решения множества технических, научных и инженерных задач, а также для создания программ широкого пользования.


Этот язык программирования в настоящее время является одним из наиболее распространенных языков программирования в мире [8].

Текущий стандарт языка ISO/IEC 14882:2017 был опубликован в декабре 2017 года. Неофициально его обозначают как C++17. Следующая версия стандарта, запланированная на 2020 год, имеет неофициальное обозначение C++20.

Рассмотрим простой пример программы, который выводит сообщение «Hello, world!», используя стандартную библиотеку, и завершается.

#include <iostream>

using namespace std;

int main()

{

count << “Hello, world!” << end;

return 0;

}

При проектировании С++ Бьерн Страуструп придерживался следующим принципам и задачам, подтверждающие особенности данного языка программирования [8]:

  • получить универсальный язык со статическими типами данных, эффективностью и переносимостью языка С;
  • иметь возможность поддерживать множество стилей программирования, в том числе процедурное программирование, абстракцию данных, объектно-ориентированное программирование и обобщённое программирование;
  • программист должен иметь свободу выбора, даже если он будет неверным;
  • для быстрого и легкого перехода от языка программирования С, попытаться максимально сохранить совместимость с ним;
  • необходимо избежать разночтений между С и C++, то есть любая конструкция, допустимая в этих языках, должна обозначать одно и то же и приводить к одинаковому результату программы[4];
  • избегать особенностей, которые зависят от платформы или не являются универсальными;
  • программирование на С++ не должно приводить к снижению производительности программы;
  • не требовать слишком усложнённой среды программирования.

В настоящее время, многие программисты отмечают, что все эти принципы данного языка программирования реализованы, что делает его достаточно популярным в сфере информационных технологий[5].

3.2 Java

Java — объектно-ориентированный язык программирования, который разработала компания Sun Microsystems. Официальная дата выпуска является 23 мая 1995 года [6].

Объекты в Java представляют собой экземпляры класса. Работает на различных платформах, таких как Windows, Mac OS, а также различных версий UNIX.

Принцип работы приложений на Java заключается в том, что они транслируются в байт-код, который выполняется специальной виртуальной машиной (JVM), где она является программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор.

Основным преимуществом такого способа выполнения программ является то, что байт-код не зависит от операционной системы и оборудования, что позволяет выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина. Другой важной особенностью технологии Java является гибкая система безопасности из-за того, что её исполнение полностью контролируется виртуальной машиной [6]. То есть, если какая-то операция превышает установленные полномочия программы, то происходит немедленное прерывание цикла. К таким операциям можно отнести - попытку несанкционированного доступа к данным или соединения с другим компьютером.


Часто к недостаткам концепции виртуальной машины относят то, что исполнение байт-кода виртуальной машиной может снижать производительность программ и алгоритмов, реализованных на языке Java. Как отмечают некоторые программисты, что время выполнения программ на Java в среднем в полтора-два раза больше, чем для C/C++[4].

Данное утверждение было справедливо для первых версий виртуальной машины Java, но в последнее время эта проблема практически теряет актуальность. В связи с некоторыми усовершенствования, такими как:

  • применение технологии трансляции байт-кода в машинный код непосредственно во время работы программы (JIT-технология) с возможностью сохранения версий класса в машинном коде,
  • широкое использование платформенно-ориентированного кода (native-код) в стандартных библиотеках,
  • аппаратные средства, обеспечивающие ускоренную обработку байт-кода (например, технология Jazelle, поддерживаемая некоторыми процессорами фирмы ARM).

Необходимо отметить, что идеи, заложенные в концепцию и различные реализации среды виртуальной машины Java, вдохновили множество энтузиастов на расширение перечня языков, которые могли бы быть использованы для создания программ, исполняемых на виртуальной машине. Эти идеи нашли также выражение в спецификации общеязыковой инфраструктуры CLI, заложенной в основу платформы.NET компанией Microsoft [2].

Внутри Java существуют несколько основных семейств технологий:

  • J2EE или Java EE (начиная с v1.5) — Java Enterprise Edition, для создания программного обеспечения уровня предприятия;
  • J2ME, Java ME или Java Micro Edition, для использования в устройствах, ограниченных по вычислительной мощности, в том числе мобильных телефонах, КПК, встроенных системах;
  • Java Card для использования в устройствах без собственного человеко-машинного интерфейса, например в смарт-картах.

Самыми известными и часто используемыми в сфере информационных технологий считаются серверные технологии семейства J2EE [5].

Выделяют следующие возможности языка программирования[6]:

  • автоматическое управление памятью;
  • расширенные возможности обработки исключительных ситуаций;
  • богатый набор средств фильтрации ввода-вывода;
  • набор стандартных коллекций: массив, список, стек и т. п;
  • наличие простых средств создания сетевых приложений (в том числе с использованием протокола RMI).
  • наличие классов, позволяющих выполнять HTTP-запросы и обрабатывать ответы;
  • встроенные в язык средства создания многопоточных приложений, которые потом были портированы на многие языки (например Python).
  • унифицированный доступ к базам данных, а именно на уровне отдельных SQL-запросов — на основе JDBC, SQLJ и на уровне концепции объектов, обладающих способностью к хранению в базе данных — на основе Java Data Objects (англ.) и Java Persistence API;
  • поддержка обобщений (начиная с версии 1.5);
  • поддержка лямбд, замыканий, встроенные возможности функционального программирования (с версии 1.8).

Рассмотрим пример использования данного языка программирования, который создаёт надпись «Hello World!».

Class NewClass {

Public static void main (String[] args)

{

System.out.println (“Hello World!”)

}

}

Успешные и известные проекты, реализованные с привлечением Java (J2EE) технологий, считаются - RuneScape, Amazon, eBay, LinkedIn, Yahoo!.

В настоящее время компании, которые в основном фокусируются на Java (J2EE) технологиях: SAP, IBM, Oracle. В основном, СУБД Oracle Database включает JVM как свою составную часть, обеспечивающую возможность непосредственного программирования СУБД на языке Java, включая, например, триггера [5].

3.3 Язык Python

Язык Python получил широкое распространение в сфере информационных технологий за счет своей простоты в изучении и использовании. Программный код на языке Python легко читать и писать, так как он не содержит сложного синтаксиса. Так же он позволяет уместить приложение в меньшее количество строк, чем на это потребовалось бы в других языках, таких как C++ или Java [4].

История этого языка программирования начинается в конце 1980-х годов сотрудником голландского института CWI (Центр математики и информатики, голл. Centrum Wiskunde & Informatica) Гвидо ван Россумом (англ. Guido van Rossum), на основе языка ABC.

На создания Python повлияли ранее созданные языки программирования такие, как:

  • язык ABC: отступы для группировки операторов, высокоуровневые структуры данных;
  • Modula-3: пакеты, модули;
  • С, C++: некоторые синтаксические конструкции;
  • Smalltalk: ООП [1];
  • Java: обработка исключений и др.

Также большая часть других особенностей Python (например, байт-компиляция исходного кода) также была реализована ранее в других языках.

Необходимо отметить, что развитие языка происходит согласно четко регламентированному процессу создания, обсуждения, отбора и реализации документов PEP (Python Enhancement Proposal) — предложений по развитию Python [9].

Можно выделить следующие особенности, которые отмечают в Python. Во-первых, он несложный язык программирования, что дает возможность сосредоточиться на решении задачи, а не на самом языке. Во-вторых, у него существует возможность встраиваться в программы на C/C++, чтобы предоставлять возможности написания сценариев их пользователям или для ускорения работы программы. В-третьих, Python поставляется по принципу «все включено» (англ. Batteries Included) и имеет обширные возможности в стандартной библиотеке в дополнение к встроенным возможностям языка.[4] Где, в свою очередь, стандартная библиотека позволяет решать различные задачи, связанные с использованием регулярных выражений, генерацией документации, проверкой блоков кода, распараллеливанием процессов, базами данных, сетью Интернет, электронной почтой, криптографией, GUI (графическим интерфейсом пользователя) и другим системно-зависимым функционалом. В-четвертых, Python является свободным и открытым программным обеспечением (Free/Libré and Open Source Sotware – FLOSS).