Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП 1-3 лекции.docx
Скачиваний:
5
Добавлен:
18.11.2019
Размер:
55.63 Кб
Скачать
    1. Процесс разработки пп

ООАнализ - определение абстракций и интерфейса. В С++ абстракции определяются с помощью классов (класс - абстракция, экземпляр класса - конкретный объект).

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

ООПроектирование - должны определить класс на конкретном языке программирования, т.е. определить, как конкретно будет задаваться состояние класса; как конкретно реализуются методы (т.е., конкретные алгоритмы) - т.е., реализовать класс, а затем на его основе разработать и реализовать соответствующее приложение.

Реализация класса скрыта от его использования и не должна мешать применению класса в ПП. Если требуется изменить реализацию - это не должно приводить к изменению самого приложения.

ООПрограммирование и отладка - используются конкретные инструментальные средства; в нашем распоряжении - Borland С++, версии 3 или 4 (в зависимости от лабораторного класса).

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

Постановка задачи: решить систему линейных алгебраических уравнений с максимально возможной точностью.

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

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

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

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

  • Абстракция - формирование представления о качествах или свойствах предмета путем мысленного удаления некоторых частностей или материальных объектов.

  • Инкапсуляция - сокрытие (информации).

  • Наследование - получение свойств от предшественника (предка).

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

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

    1. Разработка класса в ооп.

Класс - определяемый пользователем тип. Работа с классами, как и с базовыми типами, определенными в языке, состоит из нескольких этапов:

  • определение класса (для определенных в языке типов не требуется);

  • создание объектов (экземпляров) класса;

  • работа с объектами (экземплярами) класса;

  • уничтожение объектов (экземпляров) класса после использования.

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

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

Определение интерфейса класса включает в себя:

  • определение имени класса ( определяет новый тип; абстракция, с которой будем иметь дело);

  • определение состояния класса (состав, типы и имена полей в классе, предназначенных для хранения информации, а также уровни их защиты); данные, определяющие состояние класса, получили название членов-данных класса;

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

Определение класса:

Шаги

Состав класса

Внешнее проявление

и нтерфейс (описание)

  • объявление полей данных

экземпляры переменных объектов класса, хранящие соответствующую информацию

р еализация

  • прототипы функций

  • определение функций

методы для обработки сообщений, передаваемых объектам класса

Пример определения интерфейса класса:

Класс “рациональная дробь” - Rational [‘рэшенел].

Состояние класса: числитель и знаменатель дроби; два поля типа “целое”, с именами num (от numerator [‘нью:мерэйте] - числитель) и den (от denominator [ди’номенэйте] - знаменатель). Пока ограничиваемся диапазоном представления в стандартных типах. Защита: знаменатель не должен быть равным нулю ни при каких условиях (для удобства обработки полагаем всегда знаменатель >0); поля класса не должны быть доступны извне класса не предусмотренными классом способами.

Методы класса: традиционные арифметические операции (сложение дробей - a/b + c/d = (a*d + c*b)/(b*d), затем требуется сократить дробь; умножение и т.п.); вывод значения дроби - в виде a / b, если b 1; в противном случае просто a; и т.п. На этапе определения методов могут появиться вспомогательные методы (типа сокращения дробей), которые явно не следуют из постановки задачи. Эти вспомогательные методы, как правило, не должны быть доступны извне класса.

Далее это словесное описание класса следует переложить на конкретный язык программирования - в нашем случае С++.

    1. Определение класса в С++

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

Для определения класса - специальное ключевое слово class, но можно и традиционное struct. Отличия между ними - чуть позднее.

Структура определения класса: или

class имя_класса{ struct имя_класса{

уровень_видимости: уровень_видимости:

определения_данных определения_данных

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

уровень_видимости: уровень_видимости:

. . . . . .

}; };

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