Файл: Основные понятия объектно-ориентированного программирования (Основные понятия объектно-ориентированного программирования).pdf
Добавлен: 01.04.2023
Просмотров: 116
Скачиваний: 2
СОДЕРЖАНИЕ
1. Основные понятия объектно-ориентированного программирования
2. Объект - как базовое понятие в объектно-ориентированном программировании
2.1 Первый принцип объектно-ориентированного программирования - ИНКАПСУЛЯЦИЯ
2.2 Второй принцип объектно-ориентированного программирования - НАСЛЕДОВАНИЕ
2.3 Третий принцип объектно-ориентированного программирования - ПОЛИМОРФИЗМ
3. Процесс объектно-ориентированного проектирования
4. Объектно-ориентированные языки
5. Простая объектная модель и ссылочно-объектная модель
Алгоритмическая декомпозиция это разделение системы путем разделения алгоритмов, когда каждый модуль системы выполняет один из этапов общего процесса.
Объектно-ориентированная декомпозиция это разделение системы когда в качестве критерия декомпозиции определяется принадлежность ее элементов к различным абстракциям. Абстракции описываются в виде объектов, обладающих своим собственным поведением. Каждый из них моделирует некоторый объект реального мира и является вполне осязаемой вещью, демонстрирующий вполне определенное поведение. Объекты производят действия и есть возможность, послав им сообщение, указать им выполнить что-либо.
4. Объектно-ориентированные языки
Существует огромное множество языков программирования. Значительная часть языков удовлетворят и принципам объектно-ориентированного программирования. Вначале программирование развивалось как больше процедурное программирование где алгоритм, процедура по обработке данных, являлось основой программы. При создании программ на основах принципов процедурного программирования определяли задачу, проектировали интерфейс и делили программы на логические законченные этапы. Затем писали текст программы, отлаживали и тестировали. Типичным примером процедурно-ориентированного языка является Фортран – один из первых и все еще один из используемых языков программирования. Использование идеи процедурного структурирования программ закономерно привело к созданию обширных библиотек программирования, содержащих множество небольших процедур, применяющихся при написании программ.
С течением времени акцент в программировании смещался в сторону организации структур данных. При разработке более сложного программного обеспечения более ощущалась необходимость в способах контроля правильности использования данных. И на стадии компиляции и при тестировании необходим повышенный котроль, иначе осложняется создание крупных программных продуктов. Это закономерно привело к появлению новых языков программирования - Алгола-60, а позже Паскаля, Модулы-2, Си и множества других языков программирования. Все эти языки имели более или менее развитые структуры типов данных. Как следствие, возник модульный подход к разработке программ, при котором «прячутся» данные и процедуры внутри модуля.
Позже, с изобретения языка Симула-67, в программировании наметился новый подход, который получил название объектно-ориентированного программирования, где основной идеей является объединение данных и обрабатывающих их процедур в единое целое – объекты
Различают полиморфные и мономорфные языки. Для мономорфных языков характерно то, что используемые функции, процедуры и операторы имеют уникальный тип. Полиморфные языки поддерживают концепцию поли-морфизма в теории типов, когда одно и то же имя может быть использовано для выражения различных действий. Поддержка полиморфизма осуществляет-ся через виртуальные функции, механизм перегрузки функций и операторов.
Программа будет объектно-ориентированной только при соблюдении всех трех указанных требований. В частности, программирование, не основан- ное на иерархических отношениях, не относится к OOП, а называется программированием на основе абстрактных типов данных.
Инкапсуляция, наследование и полиморфизм — фундаментальные свойства, требуемые от языка, претендующего называться объектно-ориентированным. Языки, не имеющие наследования и полиморфизма и имеющие только классы, как правило, называются основанными на классах. Различные объектно-ориентированные языки программирования используют совершенно разные подходы. Сравниваются механизм контроля типов, способность поддерживать различные программные модели и то, какие объектные модели они поддерживают. Языки принято делить на объектные, в которых существуют классы и объекты, и объектно-ориентированные, в не только пользуются предопределёнными классами, но и задают собственные пользовательские классы. Как пример, в языках прототипного программирования создаются объекты, устройство которых отличается от устройства прототипов.
Объектное и объектно-ориентированное программирование возникло в результате развития идеологии процедурного программирования, где данные и подпрограммы и их обработки напрямую не связаны. Кроме того, в современном объектно-ориентированном программировании часто большое значение имеют понятия события и компонента. В свою очередь это представлено в парадигмах событийно-ориентированного программирования и компонентного программирования.
Объектно-ориентированное программирование в настоящее время является абсолютным лидером в области прикладного программирования. Как пример, такие распространненные языки программирования, как Java, C#, C++, JavaScript и др. Однако, в области системного программирования до сих пор лидирует парадигма процедурного программирования. Основным языком программирования является язык C. Но, при взаимодействии системного и прикладного уровней операционных систем, существенное распространено влияние языков объектно-ориентированного программирования. Например, мультиплатформенным стандартом стала система Qt, написанная на языке C++.
Си++ это универсальный язык программирования, задуманный так, чтобы сделать программирование более удобным. Си++ является надмножеством языка программирования Cи. Его продолжением, за исключением некоторых второстепенных деталей. Си++ предоставляет гибкие и эффективные средства определения новых типов. Определяя новые типы, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. При правильном использовании этот метод дает более короткие, проще понимаемые и легче контролируемые программы.
Первым языком программирования, в котором были предложены принципы объектной ориентированности, была Симула. В момент своего появления (в 1967 году), этот язык программирования предложил поистине революционные идеи: объекты, классы, виртуальные методы и др., однако это всё не было воспринято современниками как нечто грандиозное. Тем не менее, большинство концепций были развиты Аланом Кэйем и Дэном Ингаллсом в языке Smalltalk. Именно он стал первым широко распространённым объектно-ориентированным языком программирования.
Различаются чистые и гибридные объектно-ориентированные языки. Чистые — это те, которые позволяют использовать только одну модель программирования — объектно-ориентированную. Можно объявлять классы и методы, но нет возможности завести глобальные переменные и обычные функции и процедуры старого типа.
Java (и его клон C#) является чистым объектно-ориентированным языком (как Eiffel и Smalltalk). На первый взгляд это кажется положительной идеей. Однако она ведет к тому, что используется множество статических методов и статических данных, что не так уж отличается от использования глобальных функций и данных, за исключением более сложного синтаксиса. Чистые объектно-ориентированные языки дают преимущество новичкам в объектно-ориентированном программировании, потому что программист вынужден использовать (и учить) модель объектно-ориентированного программирования. C++ и Object Pascal, наоборот, - типичные примеры гибридных языков, которые позволяют программистам использовать при необходимости традиционный подход C или Pascal.
C# (произносится “си шарп”) – объектно-ориентированный язык программирования. Разработан в 1998-2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как язык разработки приложений для платформы Microsoft.NET Framework и впоследствии был стандартизирован как ECMA-334 и ISO/IEC 23270.
C# относится к семье языков с С-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML.
Переняв многое от своих предшественников – языков C++, Pascal, Java, С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем, например, C# в отличие от C++ не поддерживает множественное наследование классов (между тем допускается множественное наследование интерфейсов).
C# разрабатывался как язык программирования прикладного уровня для CLR и, как таковой, зависит, прежде всего, от возможностей самой CLR. Это касается, прежде всего, системы типов C#, которая отражает BCL. Присутствие или отсутствие тех или иных выразительных особенностей языка диктуется тем, может ли конкретная языковая особенность быть транслирована в соответствующие конструкции CLR. Так, с развитием CLR от версии 1.1 к 2.0 значительно обогатился и сам C#; подобного взаимодействия следует ожидать и в дальнейшем (однако, эта закономерность была нарушена с выходом C# 3.0, представляющего собой расширения языка, не опирающиеся на расширения платформы.NET). CLR предоставляет C#, как и всем другим.NET-ориентированным языкам, многие возможности, которых лишены «классические» языки программирования. Например, сборка мусора не реализована в самом C#, а производится CLR для программ, написанных на C# [2].
C# – объектно-ориентированный язык программирования. Разработан 1998-2001 годах группой инженеров под руководством Андерса Хейлсберга в компании «Microsoft» как язык разработки приложений для платформы Microsoft.NET Framework.
C# относится к семье языков с C-подобным синтаксисом. Его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типов), делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML.
C# разрабатывался как язык программирования прикладного уровня для CLR и, как таковой, зависит, прежде всего, от возможностей самой CLR. Это касается, прежде всего, системы типов C#, которая отражает BCL. Присутствие или отсутствие тех или иных выразительных особенностей языка диктуется тем, может ли конкретная языковая особенность быть транслирована в соответствующие конструкции CLR. Так, с развитием CLR от версии 1.1 к 2.0 значительно обогатился и сам C#; подобного взаимодействия следует ожидать и в дальнейшем (однако, эта закономерность была нарушена с выходом C# 3.0, представляющего собой расширения языка, не опирающиеся на расширения платформы.NET). CLR предоставляет C#, как и всем другим.NET-ориентированным языкам, многие возможности, которых лишены «классические» языки программирования [4].
Java – объектно-ориентированный язык программирования, разработанный компанией «Sun Microsystems» (в последующем приобретённой компанией «Oracle»). Приложения Java обычно транслируется в специальный байт-код, поэтому они могут работать на любой виртуальной Java-машине вне зависимости от компьютерной архитектуры. Дата официального выпуска – 23 мая 1995 года.
Программы на Java транслируются в байт-код, выполняемый виртуальной машиной Java (JVM) программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор.
Достоинством подобного способа выполнения программ является полная независимость байт- кода от операционной системы и оборудования, что позволяет выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина. Другой важной особенностью технологии Java является гибкая система безопасности, в рамках которой исполнение программы полностью контролируется виртуальной машиной. Любые операции, которые превышают установленные полномочия программы (например, попытка несанкционированного доступа к данным или соединения с другим компьютером) вызывают немедленное прерывание.
Часто к недостаткам концепции виртуальной машины относят снижение производительности. Ряд усовершенствований несколько увеличил скорость выполнения программ на Java:
− применение технологии трансляции байт-кода в машинный код непосредственно во время работы программы (JIT-технология) с возможностью сохранения версий класса в машинном коде;
− широкое использование платформенно-ориентированного кода (native-код) в стандартных библиотеках;
− аппаратные средства, обеспечивающие ускоренную обработку байт-кода (например, технология Jazelle, поддерживаемая некоторыми процессорами фирмы ARM).
Идеи, заложенные в концепцию и различные реализации среды виртуальной машины Java, вдохновили множество энтузиастов на расширение перечня языков, которые могли бы быть использованы для создания программ, исполняемых на виртуальной машине. Эти идеи нашли также выражение в спецификации общеязыковой инфраструктуры CLI, заложенной в основу платформы.NET компанией «Microsoft»
Smalltalk расширяет эту идею до уровня «обобъекчивания» таких предопределенных типов данных, как целые и символы, а также языковых конструкций (таких как циклы). Это теоретически интересно, но сильно уменьшает эффективность. Java останавливается много раньше, допуская присутствие простых не объектно-ориентированных типов данных (хотя имеются необязательные классы-обертки и для простых типов).