Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

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

Содержание:


ВВЕДЕНИЕ

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

Методики, применяемые для проектирования программ и их систем, естественно, были сформированы не за один день, а становление их проходило на протяжении достаточно продолжительного промежутка времени. Необходимость создания все новых и новых методик обнаруживалась при разработке сложных программных систем в условиях дефицита времени на разработку. Такие инциденты были свойственны крупным промышленным организациям, в частности, оборонного ведомства. По этой причине некоторые сегодняшние методики изначально были, например, внутренними стандартами Министерства Обороны Соединенных Штатов Америки.

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

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

Процессный подход ориентирован не на организационную структуру, а на бизнес-процессы, протекающие в самой организации.

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

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

Исходя из вышесказанного, определяется цель исследования: рассмотреть основные понятия объектно-ориентированного программирования.

Для достижения поставленной цели необходимо выполнить следующие задачи:

  1. Рассмотреть сущность объектно-ориентированного программирования;
  2. Привести основные характеристики объектно-ориентированного программирования;
  3. Проанализировать понятие «классы» в контексте объектно-ориентированного программирования;
  4. Охарактеризовать понятие «Наследование» в контексте объектно-ориентированного программирования;
  5. Рассмотреть понятие «Инкапсуляция» в контексте объектно-ориентированного программирования;
  6. Дать анализ понятию «Полиморфизм» в контексте объектно-ориентированного программирования.

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

Глава 1. Объектно-ориентированное программирование. Сущность, характеристики

Сущность объектно-ориентированного программирования

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

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

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

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

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

Объект можно определить как осязаемую реальность – предмет или явление, которое имеет четко определяемое поведение. Объект обладает такими характеристиками, как состояние, поведение, индивидуальность; структура и поведение схожих объектов определяют общий для них класс[3].

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

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

Класс – это некоторое множество объектов, которые связаны общностью структуры и поведения. Класс инкапсулирует (объединяет) в себе данные (атрибуты) и поведение (операции). Любой объект представляет собой экземпляр класса.

Среди основных базовых составляющих объектно-ориентированного подхода можно выделить основные:

    • унифицированный процесс;
    • унифицированный язык моделирования;
    • шаблоны проектирования[4].

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

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

На стадиях анализа и проектирования будущей информационной системы зачастую применяются так называемые шаблоны (паттерны) проектирования. В данном случае под шаблоном понимается именованная пара «проблема/решение», которая содержит готовое обобщенное решение некоторой типичной проблемы. В большинстве случаев шаблон кроме текстового описания может также включать одну или несколько диаграмм UML (например, диаграммы классов, последовательности и/или коммуникации), которые графически иллюстрируют состав и структуру классов, и, кроме того, особенности их взаимодействия при решении некоторой проблемы. Шаблоны должны быть разработаны опытными профессионалами и являться проверенными, эффективными, оптимальными решениями. Помимо всего прочего, использование шаблонов может многократно уменьшить затраты и повысить качество разработки программного и информационного обеспечения[5].

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

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

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

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

  • снижение сложности программного обеспечения;
  • увеличение надежности программного обеспечения;
  • обеспечение возможности модификации отдельных составляющих ПО без изменения остальных его компонентов;
  • обеспечение возможности повторного использования отдельных компонентов программного обеспечения[6].

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

Характеристики объектно-ориентированного программирования

Среди основных механизмов объектно-ориентированного подхода можно выделить следующие:

    • абстрагирование (abstraction);
    • инкапсуляция (encapsulation);
    • наследование (inheritance);
    • полиморфизм (polymorphism);
    • модульность (modularity);
    • иерархия (hierarchy)[7].

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

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

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

Модульность является таким свойством системы, которое связано с возможностью ее декомпозиции на ряд внутренне связных, но слабо связанных между собой составных частей. Инкапсуляция и модульность вместе организуют барьеры между абстракциями.

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

Иерархия представляет собой ранжированную или упорядоченную систему абстракций, их некоторое распределение по уровням. Основными видами иерархических структур применительно к сложным системам являются структура классов и структура объектов. Как пример иерархии классов можно привести: простое и множественное наследование (один класс применяет структурную или функциональную часть соответственно одного или нескольких других классов), а иерархии объектов – агрегация[8].

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

    • архитектуры компьютеров (Burroughs 5000, Plessey 250, IBM System/38, Intel 432);
    • объектно-ориентированных операционных систем (Plessey/System 250, Secure UNIX, StarOS, iMax);
    • объектно-ориентированных языков программирования (Simula, Smalltalk, Modula);
    • теории баз данных (модели «сущность-связь»);
    • систем искусственного интеллекта (фреймы)[9].

При разработке программного обеспечения и автоматизированных информационных систем понятие «объект» впервые было введено Оле-Джоаном Далем, Бьорном Мюрхогом и Кристеном Ныгардом из Норвежского вычислительного центра, расположенного в городе Осло. Названные специалисты разработали язык Simula 67, который был создан на основе языка Algol-60 и предназначался для моделирования и описания сложных систем. Однако по-настоящему широкое распространение данной идеи было осуществлено при разработке языка SmallTalk в 1990 г. Аланом Кейем из Исследовательского центра фирмы Xerox (г. Пало-Альто). В SmallTalk применялись исключительно объектно-ориентированные конструкции.

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

Ниже рассматриваются некоторые второстепенные понятия объектно-ориентированного подхода.

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

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

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

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

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

Глава 2. Основные понятия объектно-ориентированного программирования

2.1 Классы

Класс – это абстрактное понятие, сравнимое с понятием категория в его обычном смысле.

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

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

На рисунке 1 эта структура категорий представлена графически в виде дерева.

Рисунок 1 Дерево категорий примера «Музыкальные инструменты»

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

Класс в ООП – это абстрактный тип данных, который включает в себя не только данные, но и функции и процедуры.

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

Существует 2 способа включения метода в класс:

  1. Определение метода при описании класса.
  2. Объявление метода при описании, а его описание - при вызове.

Методы, определенные внутри класса, являются неявно встроенными.

Пример:

class A

{

int x, y;

int sum ( ) { return (x + y) ; }

} ;

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

Пример:

Class B

{

int x, y;

int sum ( )

} ;

int B::sum ( )

{

return (x + y) ;

}

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

Например:

  • статически - Toplist foo;
  • динамически - Toplist *bar; bar=new Toplist;

Для статических и динамических классов применимы те же правила и принципы, что и для статических и динамических переменных[13].

2.2 Наследование

Наследование – один из четырёх важнейших механизмов объектно-ориентированного программирования (наряду с инкапсуляцией, полиморфизмом и абстракцией), позволяющий описать новый класс на основе уже существующего (родительского), при этом свойства и функциональность родительского класса заимствуются новым классом. Другими словами, класс-наследник реализует спецификацию уже существующего класса (базовый класс). Это позволяет обращаться с объектами класса-наследника точно так же, как с объектами базового класса[14].

Простое наследование: Класс, от которого произошло наследование, называется базовым или родительским (англ. base class). Классы, которые произошли от базового, называются потомками, наследниками или производными классами (англ. derived class). В некоторых языках используются абстрактные классы.

Абстрактный класс — это класс, содержащий хотя бы один абстрактный метод, он описан в программе, имеет поля, методы и не может использоваться для непосредственного создания объекта. То есть от абстрактного класса можно только наследовать. Объекты создаются только на основе производных классов, наследованных от абстрактного.

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

Наследование классов — очень мощная возможность в объектно-ориентированном программировании. Оно позволяет создавать производные классы (классы наследники), взяв за основу все методы и элементы базового класса (класса родителя). Таким образом, экономится масса времени на написание и отладку кода новой программы. Объекты производного класса свободно могут использовать всё, что создано и отлажено в базовом классе. При этом мы можем в производный класс дописать необходимый код для усовершенствования программы: добавить новые элементы, методы и т.д. Базовый класс останется нетронутым[15].

Множественное наследование

При множественном наследовании у класса может быть более одного предка. В этом случае класс наследует методы всех предков. Достоинства такого подхода в большей гибкости. Множественное наследование реализовано в C++. Из других языков, предоставляющих эту возможность, можно отметить Python и Эйфель. Множественное наследование поддерживается в языке UML.

Множественное наследование — потенциальный источник ошибок, которые могут возникнуть из-за наличия одинаковых имен методов в предках. В языках, которые позиционируются как наследники C++ (Java, C# и др.), от множественного наследования было решено отказаться в пользу интерфейсов. Практически всегда можно обойтись без использования данного механизма. Однако, если такая необходимость все-таки возникла, то, для разрешения конфликтов использования наследованных методов с одинаковыми именами, возможно, например, применить операцию расширения видимости — «::» — для вызова конкретного метода конкретного родителя.

Попытка решения проблемы наличия одинаковых имен методов в предках была предпринята в языке Эйфель, в котором при описании нового класса необходимо явно указывать импортируемые члены каждого из наследуемых классов и их именование в дочернем классе. Большинство современных объектно-ориентированных языков программирования (C#, Java, Delphi и др.) поддерживают возможность одновременно наследоваться от класса-предка и реализовать методы нескольких интерфейсов одним и тем же классом. Этот механизм позволяет во многом заменить множественное наследование — методы интерфейсов необходимо переопределять явно, что исключает ошибки при наследовании функциональности одинаковых методов различных классов-предков.

Основные характеристики и важные особенности наследования:

  1. Наследование – это определение производного класса, который может обращаться ко всем элементам и методам базового класса за исключением тех, которые находятся в поле private;
  2. Синтаксис определения производного класса: class Имя_Производного_Класса: спецификатор доступаИмя_Базового_Класса { /*код*/ };
  3. Производный класс имеет доступ ко всем элементам и методам базового класса, а базовый класс может использовать только свои собственные элементы и методы.
  4. В производном классе необходимо явно определять свои конструкторы, деструкторы и перегруженные операторы присваивания из-за того, что они не наследуются от базового класса. Но их можно вызвать явным образом при определении конструктора, деструктора или перегрузки оператора присваивания производного класса, например таким образом (для конструктора): Конструктор_Производного_Класса (/*параметры*/) : Конструктор_Базового_Класса ( /*параметры*/) { }.
  5. Еще один важный момент при наследовании – перегруженные функции-методы класса потомка. В данном примере мы его не рассматривали. Но чтобы вы знали, если в классе родителе и в его классах потомках встречаются методы с одинаковым именем, то для объектов класса потомка компилятор будет использовать методы именно класса потомка. Перегруженные методы класса потомка, могут вызывать методы класса родителя. В таком случае важно помнить, что необходимо правильно определить область действия с помощью оператора :: , иначе компилятор воспримет это, как вызов функцией самой себя[16].

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

Инкапсуляция (encapsulation) – это механизм, который объединяет данные и код, манипулирующий этими данными, а также защищает и то, и другое от внешнего вмешательства или неправильного использования. В объектно-ориентированном программировании код и данные могут быть объединены вместе; в этом случае говорят, что создаётся так называемый «чёрный ящик». Когда коды и данные объединяются таким способом, создаётся объект (object). Другими словами, объект - это то, что поддерживает инкапсуляцию[17].

Внутри объекта коды и данные могут быть закрытыми (private). Закрытые коды или данные доступны только для других частей этого объекта. Таким образом, закрытые коды и данные недоступны для тех частей программы, которые существуют вне объекта. Если коды и данные являются открытыми, то, несмотря на то, что они заданы внутри объекта, они доступны и для других частей программы. Характерной является ситуация, когда открытая часть объекта используется для того, чтобы обеспечить контролируемый интерфейс закрытых элементов объекта.

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

Примеры реализации инкапсуляции на различных языках программирования приведены ниже.

C#[

Целью инкапсуляции является обеспечение согласованности внутреннего состояния объекта. В C# для инкапсуляции используются публичные свойства и методы объекта. Переменные, за редким исключением, не должны быть публично доступными. Проиллюстрировать инкапсуляцию можно на простом примере. Допустим, необходимо хранить вещественное значение и его строковое представление (например, для того, чтобы не производить каждый раз конвертацию в случае частого использования). Пример реализации без инкапсуляции таков:

class NoEncapsulation

{

public double ValueDouble;

public string ValueString;

}

При этом мы можем отдельно изменять как само значение Value, так и его строковое представление, и в некоторый момент может возникнуть их несоответствие (например, в результате исключения). Пример реализации с использованием инкапсуляции:

class EncapsulationExample

{

private double valueDouble;

private string valueString;

public double ValueDouble

{

get { return valueDouble; }

set

{

valueDouble = value;

valueString = value.ToString();

}

}

public string ValueString

{

get { return valueString; }

set

{

double tmp_value = Convert.ToDouble(value); //здесь может возникнуть исключение

valueDouble = tmp_value;

valueString = value;

}

}

}

Здесь доступ к переменным valueDouble и valueString возможен только через свойства ValueDouble и ValueString. Если мы попытаемся присвоить свойству ValueString некорректную строку и возникнет исключение в момент конвертации, то внутренние переменные останутся в прежнем, согласованном состоянии, поскольку исключение вызывает выход из процедуры.

Delphi

В Delphi для создания скрытых полей или методов их достаточно объявить в секции private.

TMyClass = class

private

FMyField: Integer;

procedure SetMyField (const Value: Integer);

function GetMyField: Integer;

public

property MyField: Integer read GetMyField write SetMyField;

end;

Для создания интерфейса доступа к скрытым полям в Delphi введены свойства.

PHP

class A

{

private $a; // скрытое свойство

private $b; // скрытое свойство

private function DoSomething() //скрытый метод

{

//actions

}

public function ReturnSomething() //открытый интерфейс

{

//actions

}

}

В этом примере закрыты свойства $a и $b для класса A с целью предотвращения повреждения этих свойств другим кодом, которому необходимо предоставить только права на чтение.

Java

class A {

private int a;

private int b;

private void doSomething() { //скрытый метод

//actions

}

public int getSomething() { //открытый метод

return a;

}

}

JavaScript

var A = function() {

// private

var _property;

var _privateMethod = function() { /* actions */ } // скрытый метод

// public

this.getProperty = function() { // открытый интерфейс

return _property;

}

this.setProperty = function(value) { // открытый интерфейс

_property = value;

_privateMethod();

}

}

или

var A = function() {

// private

var _property;

var _privateMethod = function() { /* actions */ } // скрытый метод

// public

return {

getProperty: function() { // открытый интерфейс

return _property;

},

setProperty: function(value) { // открытый интерфейс

_property = value;

_privateMethod();

}

}

}

2.4 Полиморфизм

Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта[18].

Например, если вы читаете данные из файла, то, очевидно в классе, реализующем файловый поток, будет присутствовать метод похожий на следующий: byte [] readBytes (int n);

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

При этом логика системы может быть реализована независимо от того, будут ли данные прочитаны из файла или получены по сети. Таким образом, мы абстрагируемся от конкретной специализации получения данных и работаем на уровне интерфейса. Единственное требование при этом – чтобы каждый используемый объект имел метод readBytes.

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

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

Во время выполнения объекты производного класса могут обрабатываться как объекты базового класса в таких местах, как параметры метода и коллекции или массивы. Когда это происходит, объявленный тип объекта перестает соответствовать своему типу во время выполнения.

Базовые классы могут определять и реализовывать виртуальные методы, а производные классы – переопределять их, т. е. предоставлять свое собственное определение и реализацию. Во время выполнения, когда клиент вызывает метод, CLR выполняет поиск типа объекта во время выполнения и вызывает перезапись виртуального метода. Таким образом, в исходном коде можно вызвать метод на базовом классе и привести версию производного класса метода, который необходимо выполнить.

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

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

Применить виртуальный метод для вызова соответствующего метода на любой производный класс через единый вызов в метод базового класса[20].

ЗАКЛЮЧЕНИЕ

В ходе выполнения работы была достигнута поставленная цель, а именно: рассмотрены основные понятия объектно-ориентированного программирования.

Для достижения цели были выполнены следующие задачи:

  1. Рассмотрена сущность объектно-ориентированного программирования;
  2. Приведены основные характеристики объектно-ориентированного программирования;
  3. Проанализировано понятие «классы» в контексте объектно-ориентированного программирования;
  4. Охарактеризовано понятие «Наследование» в контексте объектно-ориентированного программирования;
  5. Рассмотрено понятие «Инкапсуляция» в контексте объектно-ориентированного программирования;
  6. Дан анализ понятию «Полиморфизм» в контексте объектно-ориентированного программирования.

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

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

  1. Иванов А.Г., Карпова А.В., Семик В.П., Филинов Ю.Е. Объектно-ориентированная среда программирования. Системы и средства информатики. Вып.2. М.: Наука, 1991.
  2. Лисков Б., Гатэг Дж. Использование абстракций и спецификаций при разработке программ: Пер. с англ. - М.: Мир, 1989. - 424 с.
  3. Программирование. Специальный выпуск по объектно-ориентированному программированию. N 6, 1990.
  4. Фокс Дж. Программное обеспечение и его разработка. М.:Мир, 1985. - 368 с.
  5. Архангельский А.Я. Программирование Delphi 5 — М: Изд. дом «Бином», 2000.
  6. Бобровский С.И. Delphi 7: Учебный курс. — СПб.: Питер, 2004.
  7. Фридман А.Л. Основы объектно-ориентированной разработки программных систем. — М.: ФиС, 2000.
  8. Статья, авторы: А.Г. Иванов, А.А. Пятницкий, Ю.Е. Филинов // Объектно-ориентированный подход [Электронный ресурс] — Режим доступа. — URL: http://grizlyk.chat.ru/art/ivan1.htm (дата обращения 17.11.2011)
  9. Сitforum // Обьектно-ориентированные языки программирования [Электронный ресурс] — Режим доступа. — URL: http://citforum.ru/database/articles/art_23.shtml
  1. Фокс Дж. Программное обеспечение и его разработка. М.:Мир, 1985. - 124 с.

  2. Фокс Дж. Программное обеспечение и его разработка. М.:Мир, 1985. - 147 с.

  3. Бобровский С.И. Delphi 7: Учебный курс. — СПб.: Питер, 2004, с. 236

  4. Бобровский С.И. Delphi 7: Учебный курс. — СПб.: Питер, 2004, с. 247

  5. Бобровский С.И. Delphi 7: Учебный курс. — СПб.: Питер, 2004, с. 259

  6. Архангельский А.Я. Программирование Delphi 5 — М: Изд. дом «Бином», 2000, с. 301

  7. Архангельский А.Я. Программирование Delphi 5 — М: Изд. дом «Бином», 2000, с. 329

  8. Архангельский А.Я. Программирование Delphi 5 — М: Изд. дом «Бином», 2000, с. 336

  9. Лисков Б., Гатэг Дж. Использование абстракций и спецификаций при разработке программ: Пер. с англ. - М.: Мир, 1989. - 367 с.

  10. Лисков Б., Гатэг Дж. Использование абстракций и спецификаций при разработке программ: Пер. с англ. - М.: Мир, 1989. - 378 с.

  11. Лисков Б., Гатэг Дж. Использование абстракций и спецификаций при разработке программ: Пер. с англ. - М.: Мир, 1989. - 383 с.

  12. Фридман А.Л. Основы объектно-ориентированной разработки программных систем. — М.: ФиС, 2000, 142 с.

  13. Фридман А.Л. Основы объектно-ориентированной разработки программных систем. — М.: ФиС, 2000, 156 с.

  14. Фридман А.Л. Основы объектно-ориентированной разработки программных систем. — М.: ФиС, 2000, 179 с.

  15. Фокс Дж. Программное обеспечение и его разработка. М.:Мир, 1985. - 214 с.

  16. Фокс Дж. Программное обеспечение и его разработка. М.:Мир, 1985. - 229с.

  17. Фокс Дж. Программное обеспечение и его разработка. М.:Мир, 1985. – 234 с.

  18. Программирование. Специальный выпуск по объектно-ориентированному программированию. N 6, 1990, с. 26

  19. Программирование. Специальный выпуск по объектно-ориентированному программированию. N 6, 1990, с. 28

  20. Программирование. Специальный выпуск по объектно-ориентированному программированию. N 6, 1990, с. 31