Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП. Курсовое проектирование ИСТ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
171.01 Кб
Скачать

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ

ПРОГРАММИРОВАНИЕ

Методические указания к выполнению курсового проекта

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

1 – 40 05 01 – 01 Информационные системы и технологии

(в проектировании и производстве)

1. ЦЕЛЬ КУРСОВОГО ПРОЕКТА

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

2. ЗАДАЧИ КУРСОВГО ПРОЕТКТА

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

  • реализующего выбранную (в соответствии с вариантом) тему курсового проекта,

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

3. Исходные данные к курсовому проекту

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

1) изучение необходимых теоретических сведений в соответствии с заданием;

2) выявление действующих субъектов системы (описание объектов и классов);

3) построение и описание диаграммы классов (Class Diagram);

4) создание программы, ее отладка и тестирование.

Содержание расчетно-пояснительной записки (перечень подлежащих разработке вопросов):

ВВЕДЕНИЕ

1. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

1.1 Постановка задачи

1.2 Описание объектно-ориентированного подхода

1.3 Описание предметной области

2. ПРАКТИЧЕСКАЯ ЧАСТЬ

2.1 Описание объектов системы, их свойств и методов

2.2 Результаты тестирования программного продукта

ЗАКЛЮЧЕНИЕ

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

ПРИЛОЖЕНИЯ

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

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

ПРИЛОЖЕНИЕ А

(справочное)

1. Классы (язык C++)

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

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

Объектно-ориентированное программирование характеризуется тремя основными свойствами:

1. Инкапсуляция – это комбинирование записей с процедурами и функциями, манипулирующими полями этих записей. Объединение в одном классе свойств и методов называется инкапсуляцией. С данным термином тесно связаны понятия сокрытия информации и хорошо разработанного интер­фейса.

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

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

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

Объявление класса:

Тип_класса имя_класса [: базовые классы]

{ список_членов_класса

} ;

Базовые классы — список классов, разделяемых запятыми, элементы которых наследуются определяемым (про­изводным) классом.

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

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

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

  • могут быть описаны с атрибутом доступа public, protected или private;

  • могут быть описаны как static; статические члены класса не копируются при создании объ­екта, а остаются в единственном экземпляре для всех объ­ектов класса; статические члены класса должны определяться где-либо в программе, но не в рамках описания класса, и к ним можно об­ращаться не только через объекты, но и через имена клас­сов:

имя_класса:: static_член_класса;

  • могут быть описаны как const; члены класса, которые описываются как const, могут быть инициализированы только один раз и после этого больше не могут быть изменены (следовательно, они должны ини­циализироваться конструктором);

  • описание класса заканчивается точкой с запятой.

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

Внутри класса разрешается определять типы, следовательно, один класс может быть описан внутри другого.

Методы класса

Методы класса:

  • имеют доступ ко всем свойствам класса;

  • представляют единственную возможность доступа к private-свойствам своего класса;

  • могут быть описаны как public, protected или private;

  • могут быть описаны как static;

  • могут быть описаны как const; методы класса, описанные как const, не могут изменять значения свойств и могут возвращать указатель или ссылку только на свойства класса, описанные как const. Они являются единственными методами класса, кото­рые могут вызываться для свойства-константы;

  • методы могут быть определены как внутри класса, так и за его рамками.

Атрибуты доступа

Атрибуты доступа public, private и protected регулируют воз­можность доступа к членам класса изнутри или извне класса (табл.1). Сле­довательно, они являются важным инструментом инкапсуляции. Прежде всего, с помощью этих атрибутов доступ к отдельным членам класса может быть ограничен.

Таблица 1— Атрибуты доступа к членам класса

Атрибут доступа

Значение

public

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

имя_о6ъекта.имя_члена_класса

ссылка_на_объект.имя_члена_класса

указатель_на_объект->имя_члена_класса

private

Член класса может использоваться только методами данного класса и функциями-«друзьями» того класса, в котором он описан

protected

To же, что и private. Но дополнительно член класса с данным атрибутом доступа может использоваться методами и функциями-«друзьями» классов, производных от описанного класса. Если нет производных классов, то private и protected идентичны.

Специальные методы класса

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

Для конструкторов существует несколько важных правил:

  • Имя конструктора совпадает с именем его класса;

  • Конструктор не имеет никакого возвращаемого значения (даже void);

  • Классу без конструктора предоставляется конструктор по умолчанию;

  • Если конструктор описан явно, то конструктор по умолчанию не генерируется;

  • Конструкторы могут быть перегружены;

  • Перегрузка чаще всего используется для передачи кон­структору аргументов, предназначенных для инициализа­ции данных-членов класса;

  • Конструкторы не наследуются.

Деструкторы вызываются автоматически, если объекты классов становятся недействительными (например, при выходе за об­ласть определения или при вызове оператора delete для указа­теля на объект класса). Деструктор уничтожает объект и освобож­дает зарезервированную память.

Для деструкторов действительны правила, аналогичные прави­лам для конструкторов:

  • Имя деструктора также совпадает с именем его класса, но предваряется символом «~» (тильдой):

~имя_класса()

  • Деструктор не имеет никакого возвращаемого значения (даже void);

  • Деструктор не может быть описан с ключевым словом static и const;

  • Если в классе деструктор явно не описан, то компилятор ге­нерирует деструктор по умолчанию;

  • Деструктор не наследуется;

  • Указатель на деструктор не может быть определен.

Деструкторы отличаются от конструкторов следующими особен­ностями:

  • Деструкторам не могут передаваться аргументы, следова­тельно: деструкторы могут переопределяться, но не перегружаться, деструкторы могут описываться как virtual, деструкторы классов, производных от базовых классов, имеющих виртуальные деструкторы, автоматически стано­вятся виртуальными;

  • Деструкторы могут вызываться явно;

  • Деструктор в некоторых случаях должен быть обязательно задан явно (например, если область памяти выделена с по­мощью оператора new).

Пример объявления класса.

Пример объявления класса СVideoRecorder:

class VideoRecorder

{

//свойства

char* producer;

int* resolution;

bool fast_shooting, longplay, two_canal;

public:

//методы

void turn_on()

{//операторы}

void play()

{//операторы}

void record()

{//операторы}

void play_on_fast_shooting()

{//операторы}

void turn_off()

{//операторы}

};

Имея, класс СVideoRecorder, создадим объект данного класса ту_rеcorder и обратимся к его функциям в программе:

СVideoRecorder mу_rеcorder; // создали объект

my_recorder.turn on(); // вызвали соответствующие функции

my_recorder.play_on_fast shooting();

my_recorder.turn_off();

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]