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

Автор работы: Пользователь скрыл имя, 14 Ноября 2013 в 18:26, контрольная работа

Описание работы

Использование объектно-ориентированного программирования является хорошим решением при разработке крупных программных проектов. Чем проект объемнее и сложнее, тем больше выгоды вы получите при использовании объектно-ориентированной технологии программирования. Одним из наибольших преимуществ объектно-ориентированного программирования является возможность многократного использования программного кода. Если вы, к примеру, создали класс, то можете порождать от него новые классы и изменять их свойства и функциональное назначение.

Файлы: 1 файл

Введение.docx

— 27.07 Кб (Скачать файл)

Введение

Исторически сложилось так, что программирование возникло и  развивалось как процедурное  программирование, которое предполагает, что основой программы является алгоритм, процедура обработки данных. Объектно-ориентированное программирование - это методика разработки программ, в основе которой лежит понятие  объекта как некоторой структуры, описывающей объект реального мира, его поведение. Задача, решаемая с  использованием методики объектно-ориентированного программирования, описывается в  терминах объектов и операций над  ними, а программа при таком  подходе представляет собой набор  объектов и связей между ними. Другими  словами можно сказать, что объектно-ориентированное  программирование представляет собой  метод программирования, который  весьма близко напоминает наше поведение. Оно является естественной эволюцией  более ранних нововведений в разработке языков программирования. Объектно-ориентированное  программирование является более структурным, чем все предыдущие разработки, касающиеся структурного программирования. Оно также является более модульным и более абстрактным, чем предыдущие попытки абстрагирования данных и переноса деталей программирования на внутренний уровень.

Использование объектно-ориентированного программирования является хорошим  решением при разработке крупных  программных проектов. Чем проект объемнее и сложнее, тем больше выгоды вы получите при использовании объектно-ориентированной  технологии программирования. Одним  из наибольших преимуществ объектно-ориентированного программирования является возможность  многократного использования программного кода. Если вы, к примеру, создали  класс, то можете порождать от него новые классы и изменять их свойства и функциональное назначение.

В качестве примера объектно-ориентированного языка в дальнейшем будем рассматривать  Borland Pascal. Языковые расширения Borland Pascal предоставляют все средства объектно-ориентированного программирования: большую структурированность и модульность, большую абстрактность и встроенную непосредственно в язык возможность повторного использования. Все эти характеристики соответствуют коду, который является более структурированным, более гибким и более легким для обслуживания.

Объектно-ориентированное  программирование требует оставить в стороне характерные представления  о программировании, которые долгие годы рассматривались как стандартные. Однако после того, как это сделано, объектно-ориентированное программирование становится простым, наглядным и превосходным средством разрешения многих проблем, которые доставляют неприятности традиционному программному обеспечению.

 

 

 

 

 

 

 

 

 

 

 

I. Основные понятия

В основе объектно-ориентированного язык программирования лежат два  основных понятия: объект и класс. Основными  характеристическими свойствами этих понятий являются:

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

Наследование - определение  объекта и его дальнейшее использование  для построения иерархии порожденных  объектов с возможностью для каждого  порожденного объекта, относящегося к  иерархии, доступа к коду и данным всех порождающих объектов.

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

II. Объект - как базовое понятие в объектно-ориентированном программировании

Понятию “объект” сопоставляют ряд дополняющих друг друга определений. Ниже приведены некоторые из них.

Объект - это осязаемая  реальность, характеризующаяся четко  определяемым поведением.

Объект - особый опознаваемый предмет, блок или сущность (реальная или абстрактная), имеющая важное функциональное назначение в данной предметной области.

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

Можно выделить пять типов  операций:

- конструктор, создание  и инициализация объекта;

- деструктор, разрушающий  объект;

- модификатор, изменяющий  состояние объекта;

- селектор для доступа  к переменным объекта без их  изменения;

- итератор для доступа  к содержанию объекта по частям  в определенной последовательности.

Известна и другая классификация  методов объекта, когда выделяют функции управления, реализации, доступа  и вспомогательные функции.

Под индивидуальностью объекта  понимают свойство объекта, позволяющее  отличать этот объект от всех других объектов.

Объекты могут находиться в определенных отношениях друг к  другу. Эти отношения могут быть иерархическими. Основные иерархические  отношения - это отношения использования  и включения. Отношение использования  реализуется посылкой сообщений  от объекта A к объекту B. При этом объект A может выступать в роли:

- активного или воздействующего  объекта, когда он воздействует  на другие объекты, но сам  воздействию не подвергается;

- пассивного или исполняющего, когда объект подвергается воздействию, но сам на другие объекты не воздействует;

- посредника, если объект  и воздействует и сам подвергается  воздействию.

Отношение включения имеет  место, когда составной объект содержит другие объекты.

 

2.1 Инкапсуляция

Объекты моделируют характеристики и поведение элементов мира, в  котором мы живем. Они являются окончательной  абстракцией данных.

Объекты содержат вместе все  свои характеристики и особенности  поведения. Отношения частей к целому и взаимоотношения между частями  становятся понятнее тогда, когда все  содержится вместе в одной упаковке. Это и называется инкапсуляцией.

2.2 Наследование  как важнейшее свойство объекта

Не менее важным является и тот факт, что объекты могут  наследовать характеристики и поведение  того, что мы называем порождающие, родительские объекты (или предки). Здесь происходит качественный скачок: наследование, возможно, является сегодня  единственным самым крупным различием  между обычным программированием  на Паскале и объектно-ориентированным  программированием в Borland Pascal.

В терминах Паскаля, объект во многом схож с записью, которая  является оболочкой для объединения  нескольких связанных элементов  под одним именем.

Процесс, с помощью которого один тип наследует характеристики другого типа, называется наследованием. Наследник называется порожденным (дочерним) типом, а тип, которому наследует дочерний тип, называется порождающим (родительским) типом. Ранее известные типы записей Паскаля не могут наследовать. Однако Borland Pascal расширяет язык Паскаля для поддержки наследования. Одним из этих расширений является новая категория структуры данных, связанная с записями, но значительно более мощная. Типы данных в этой новой категории определяются с помощью нового зарезервированного слова object. Тип объекта может быть определен как полный, самостоятельный тип в манере описания записей Паскаля, но он может определяться и как потомок существующего типа объекта путем помещения порождающего (родительского) типа в скобки после зарезервированного слова object.

Большая часть конструирования  объектно-ориентированных прикладных программ состоит в построении иерархии объектов, являющейся отражением генеалогического дерева объектов в приложениях.

Как показали данные определения, объекты тесно связаны с записями. Новое зарезервированное слово  object является наиболее очевидным различием, но как мы увидим позднее, имеется большое число других различий, некоторые из которых довольно тонкие.

 

 

 

 

III. Полиморфизм

 Полиморфизм означает, что один и тот же метод  выполняется по-разному для различных  объектов. Например, метод класса  Музыкальный инструмент - PlayMusicForAnOrchestra (играй музыку для оркестра) - может быть определен как общий метод, который может использоваться с любой категорией музыкальных инструментов. Этот метод написан таким образом, что не важно, какой именно инструмент получает задание играть, однако для классов, описывающих конкретные инструменты, данный метод должен быть переопределен (override), что даст возможность определить конкретные действия, учитывающие особенности данного инструмента.

 

IV.  Объектно-ориентированные языки

Инкапсуляция, наследование и полиморфизм — фундаментальные  свойства, требуемые от языка, претендующего  называться объектно-ориентированным. (Языки, не имеющие наследования и  полиморфизма, но имеющие только классы, обычно называются основанными на классах.) Различные объектно-ориентированные  языки используют совершенно разные подходы. Мы можем различать объектно-ориентированные  языки, сравнивая механизм контроля типов, способность поддерживать различные  программные модели и то, какие  объектные модели они поддерживают. Языки объектного программирования принято делить на объектные, в которых существуют классы и объекты, и объектно-ориентированные, в которых программист может не только пользоваться предопределёнными классами, но и задавать собственные пользовательские классы (либо создавать объекты, устройство которых отличается от устройства прототипов — в языках прототипного программирования).

Объектное и объектно-ориентированное  программирование возникло в результате развития идеологии процедурного программирования, где данные и подпрограммы (процедуры, функции) их обработки формально не связаны. Кроме того, в современном объектно-ориентированном программировании часто большое значение имеют понятия события (так называемое событийно-ориентированное программирование) и компонента (компонентное программирование).

Объектно-ориентированное  программирование в настоящее время  является абсолютным лидером в области  прикладного программирования (языки  Java, C#, C++, JavaScript, ActionScript и др.). В то же время в области системного программирования до сих пор лидирует парадигма процедурного программирования, и основным языком программирования является язык C. Хотя при взаимодействии системного и прикладного уровней операционных систем заметное влияние стали оказывать языки объектно-ориентированного программирования. Например, мультиплатформенным стандартом стала система Qt, написанная на языке C++.

Си++ - это универсальный язык программирования, задуманный так, чтобы сделать программирование более приятным для серьезного программиста. За исключением второстепенных деталей Си++ является надмножеством языка программирования Cи. Помимо возможностей, которые дает Cи, Си++ предоставляет гибкие и эффективные средства определения новых типов. Используя определения новых типов, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. При правильном использовании этот метод дает более короткие, проще понимаемые и легче контролируемые программы.

Первым языком программирования, в котором были предложены принципы объектной ориентированности, была Симула. В момент своего появления (в 1967 году), этот язык программирования предложил поистине революционные идеи: объекты, классы, виртуальные методы и др., однако это всё не было воспринято современниками как нечто грандиозное. Тем не менее, большинство концепций были развиты Аланом Кэйем и Дэном Ингаллсом в языке Smalltalk. Именно он стал первым широко распространённым объектно-ориентированным языком программирования.

Различаются чистые и гибридные  объектно-ориентированные языки. Чистые — это те, которые позволяют  использовать только одну модель программирования — объектно-ориентированную. Вы можете объявлять классы и методы, но не можете завести глобальные переменные и обычные функции и процедуры  старого типа.

Среди трех наших языков, только Java(и его клон C#) является чистым объектно-ориентированным языком (как Eiffel и Smalltalk). На первый взгляд это кажется положительной идеей. Однако она ведет к тому, что вы используете кучу статических методов и статических данных, что не так уж отличается от использования глобальных функций и данных, за исключением более сложного синтаксиса. Чистые объектно-ориентированные языки дают преимущество новичкам в объектно-ориентированном программировании, потому что программист вынужден использовать (и учить) модель объектно-ориентированного программирования. C++ и Object Pascal, наоборот, - типичные примеры гибридных языков, которые позволяют программистам использовать при необходимости традиционный подход C или Pascal.

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

Информация о работе Объектно-ориентированное программирование