Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Базовые принципы объектно-ориентированного программирования




УЧЕБНОЕ ПОСОБИЕ

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

 

для студентов специальности

”Вычислительные машины, системы и сети”

всех форм обучения

 

 

МИНСК 2003

 

УДК 681.322 (075.8)

ББК 32.97 я 73

Л 86

 

Рецензент: заведующий кафедрой математики и информатики ЕГУ, канд. техн. наук В.И. Романов

 

Луцик Ю.А.

Л 86 Объектно-ориентированное программирование на языке С++: Учеб. пособие по курсу «Объектно-ориентированное программирование» для студентов специальности «Вычислительные машины, системы и сети» всех форм обучения / Ю.А. Луцик. -Мн.: БГУИР, 2003. - 203 с. ил. 11. ISBN 985-444-562-3
  В учебном пособии рассмотрены приемы и правила объектно-ориентированного программирования с использованием языка С++. Изложены основные конструкции языка С++, а также общие принципы разработки объектно-ориентированных програм. Пособие может быть использовано студентами всех специальностей, магистрантами и аспирантами.

УДК 681.322 (075.8)

ББК 32.97 я 73

 

© Луцик Ю.А., 2003

ISBN 985-444-562-3 © БГУИР, 2003

Введение

 

Одна из важнейших задач программирования – разработка алгоритма. Имеется два основных подхода к разработке программ. Первый из них называется процедурным программированием. Для создания программ на его основе необходимо следующее:

- определить задачу, которую нужно решить;

- продумать интерфейс программы с пользователем;

- разбить программу на логически законченные этапы;

- создать текст программы;

- отладить программу;

- тестировать программу.

Второй подход называется объектно-ориентированным программированием (ООП). Для разработки программ с использованием методики объектно-ориентированного программирования необходимо:

- определить задачу;

- определить уникальные объекты в области решаемой задачи;

- определить взаимосвязь между объектами;

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

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

- объявить объекты данных классов;

- определить начальное состояние системы;

- скомпилировать, скомпоновать систему.

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

Материал пособия основывается на ряде изданий [1-4].

 

Объектно-ориентированный подход

 

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

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

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

Именно объектно-ориентированная декомпозиция отличает объектно-ориентированное проектирование от структурного; в первом случае логическая структура системы отражается абстракциями в виде классов и объектов, во втором - алгоритмами.

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

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

 

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

 

Абстрактные типы данных

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

Интерфейс и внутренняя реализация являются определяющими свойствами объектов окружающего нас мира. Интерфейс – это средство взаимодействия с некоторым объектом. Реализация – это внутреннее свойство объекта. Наибольший интерес представляет эффективность реализации.

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

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

Различают процедурную абстракцию и абстракцию данных.

Процедурная абстракция требует раздельного рассмотрения цели процедуры (например функции С/С++) и ее внутренней реализации.

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

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

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

 

Базовые принципы объектно-ориентированного программирования

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

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

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

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

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

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

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

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

- определить объект для заданного класса;

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

- изменить поведение нового класса (изменить существующие и добавить новые функции).

Построение нового класса, наследуя его из существующего, предполагает:

- добавление в новый класс новых компонент-данных;

- добавление в новый класс новых компонент-функций;

- замену в новом классе наследуемых из старого класса компонент-функций;

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

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

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

 

Язык программирования называется объектно-ориентированным, если:

- он поддерживает абстрактные типы данных (объекты с определенным интерфейсом и скрытым внутренним состоянием);

- объекты имеют связанные с ними типы (классы);

- поддерживается механизм наследования.

 

Основные достоинства языка С++

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

 

Особенности языка С++

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

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

 

Ключевые слова

Язык С++ расширяет множество ключевых слов принятых в языке С следующими ключевыми словами:

class protected friend inline

private new operator virtual

public delete this template

 

Константы и переменные

В С++ односимвольные константы имеют тип char, в то же время в С++ поддерживается возможность работы с двухсимвольными константами типа int:

’aB’, ’\n\t’.

При этом первый символ располагается в младшем байте, а второй - в старшем.

 

Операции

В языке С++ введены следующие новые операции:

:: - операция разрешения контекста;

.* и ->* - операции обращения через указатель к компоненте класса;

new и delete - операции динамического выделения и освобождения памяти.

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

 

Типы данных

В С++ поддерживаются все типы данных, предопределенные в С. Кроме того, введены несколько новых типов данных: классы и ссылки.

Ссылки расширяют и упрощают передачу аргументов в функцию (по значению или по адресу).

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...