Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции_Классы

.pdf
Скачиваний:
9
Добавлен:
02.06.2015
Размер:
616.21 Кб
Скачать

*** ПиОА_Л7 ***

Методологии разработки Программ

Цель: понять цели и принципы структурной и объектно-

ориентированной методологий разработки П.

Содержание:

Структурная методология разработки П;

Объектно-Ориентированное Прогр-е (ООП);

Шаблон и структура Класса;

Пример Класса Очередь

Структурная Методология разработки П

Начало 70-х – сложность и объем П-х проектов привели к разработке СМ: Дейкстра, Вирт (язык Pascal), Дал, Хоар, Йордан, Майерс и др. –

строгие правила ведения П-х проектов.

Цели СМ:

обеспечить дисциплину П-я,

улучшить понимаемость П,

повысить эффективность разработки П,

обеспечить надежность П,

уменьшить время и стоимость разработки П

Принципы СМ (процедурного П-я):

принцип абстракции (П по уровням);

принцип формальности – строгий метод-й подход – возможн-ть доказат-ва правильн-ти П;

принцип «разделяй и властвуй»: сложная проблема делится на ряд более простых, П – на модули с независимой отладкой и тестированием;

принцип иерархического упорядочивания

Задача п/З_1 . . . . .

п/З_12 . . . . .

. . . . .

п/З_К

. . . . .

Фун1

Фун2

. . . . .

ФунN

Правила формирования Стр-х П (СП)

1.

Начинать с простейшей блок-сх.

 

 

2.

Каждый

 

- действие

 

 

 

 

 

 

 

 

 

 

 

 

 

 

м.б. замещен замещен двумя.

 

 

 

 

 

 

 

 

 

 

 

 

 

3.

Каждый

 

- действие

 

 

 

 

м.б. замещен любой из 3-х управляющих

 

 

структур (следование, развилка, цикл).

 

4.

Правила 2 и 3 могут применяться

 

 

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

 

 

 

 

 

Правила формирования СП

 

5.

Управляющие структуры могут комбин-ся

 

 

только пакетированием или вложением:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Станд-е блоки

2

При формировании СП

глаголы в описании проектируемой П

помогают определить множ-во Фун,

кот. будут совместно работать в П.

Эволюция технологии Стр Прогр-я

Прикл П Библиотека ПП Пакет ПП

Примеры:

вычислительные методы,

статистическая обработка Д

Эволюция технологии Прогр-я

 

 

 

 

Объект

 

 

 

 

 

 

 

 

 

Данные

Программы

 

Организация

 

 

 

Данных –

 

связаны с

 

 

 

 

 

обрабат. их

 

 

Программы

 

Процедуры

 

 

Процедурами

 

 

 

 

 

Д – для поддержки

ООП

вып Фун действий

 

3

Правила формирования Стр-х П (СП)

1. Начинать с простейшей блок-сх.

2. Каждый

 

- действие

 

 

м.б. замещен замещен двумя.

 

 

 

 

3. Каждый

 

- действие

 

 

 

 

 

м.б. замещен любой из 3-х управляющих структур (следование, развилка, цикл).

4.Правила 2 и 3 могут применяться многократно и в любой послед-сти.

5.Управляющие структуры могут комбин-ся только пакетированием или вложением:

Станд-е блоки

При формировании СП глаголы в описании проектируемой П помогают определить множ-во Фун, кот. будут совместно работать в П.

Об-Ориент-я метод-я разработки П

ООП Об-Ориент П-е – моделир-е Об реального мира Прогр-ми аналогами.

ООП – как развитие и более высокая ступень П-я.

Все Об имеют общий формат описания:

-атрибуты (цвет, масса, форма …);

-методы, определяющие поведение Об (перемещение, смена цвета, …)

4

ВСтрМет основная П-я единица Фун.

ВООП главные понятия КЛАСС и ОБЪЕКТ.

КЛАСС – ADT, определяемый Прог-ом,

содержит описание Д и набор Фун для работы с этими Д.

КЛАСС

Данные Фун

Экземпляр Класса – Об с опред-ми значениями атрибутов - параметров

Концепции ООП

Инкапсуляция Наследов-е Полиморфизм

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

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

 

 

n_fun( )

Данные,

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

Процедуры обр. Д

n_fun( )

 

Полиморфизм

Полиморфизм

«Один интерфейс – много методов»

Пример: Об на экране

Точка (Х, Y)

Отрезок (X1, Y1, X2, Y2)

Фун перемещения move(dX, dY);

5

Вывод

Для Пр-я на С++ нужно знать Стр-ю и ООметодологии разработки П,

С++ гибридный язык:

-Пр-е в стиле Си;

-Пр-е в стиле С++;

-Пр-е в стилях Си и С++;

Понятие Класса в С++. Шаблон класса:

class name_class

{public: // Доступны в программе

<Общие Д и Фун >

protected: // Доступны функциям производного класса

< Защищённые Д и Фун >

private: // Доступны только функциям этого класса

< Закрытые Д и Фун >

};

Пример: класс QUEUE

для модели Очередь на структуре Массив

Постановка в Оч

Обслуживание

4

7

3

0

Массив q

0

floc=0 lloc=3 Индексы Массива q

4

7

3

8

9

0

 

0

floc=2 lloc=5

6

class QUEUE //Очередь

{ public: // Доступны в программе

void init( int

n_arr ); // Инициализация Об

int qput( int

m ); // Постановка в Оч

int qget( void ); // Обслужить 1-го в Оч

рrivate: // Доступны только функциям этого класса

int n,

// Размер массива,

*q,

// Ук на Оч - массив

floc,

// Индекс на обслуживание

lloc;

// Индекс на постановку в Оч

void clear_q(); //Очистка Оч перед пуском М

};

Описание функций членов класса

// Инициализация Об - Очереди

void QUEUE :: init( int n_arr )

{ floc = lloc = 0;

n = n_arr;

q = new int [n]; // Массив в ДП

clear_q( ); // Очищаем Оч

}// В объявлении Класса нельзя инициализировать параметры Об !?!

// Фун обслуживания клиента в Оч

int QUEUE :: q_get( )

{ if (floc == lloc) return 0; // Очередь пустая

return q[ floc++ ]; // Номер клиента

}

4

7

3

8

9

0

0

floc=2 lloc=5

7

// Постановка Клиента в Оч int QUEUE :: q_put( int m )

{if(lloc == n) return 0; // Ресурсы Оч законч.

//Постановка Клиента m в Оч:

q[ lloc++ ] = m; return m;

}

// Очистка массива Оч

void clear_q( ); // Самост-но составить Фун

{

. . . . . . .

}

// Тест для класса QUEUE

main( )

{ QUEUE q1, q_arr[5]; // 5 Об-Очередей int n1, n2, k;

< Ввод: n1, n2 >

q1.init( n1 ); // Инициал-я Об q1 q_arr[ 2 ].init( n2 );

q1.qput( 17 );

k=q_arr[2].qget(); // k = 0 Оч пустая

. . . . . . .

}

Замечания

Структуры и Классы отличаются:

-члены Класса по умолчанию имеют доступ private,

-в Структуре по умолчанию доступ открытый.

Фун-члены Класса могут вызывать другие Фун-члены класса без точки.

Принцип наименьших привилегий в классе

Разделение Фун-элем Класса на категории

Фун, возвращающие значения закрытых Д;

8

Фун, устанавливающие значения закрытых Д;

Фун, реализующие поведение Об;

Фун, выполняющие вспомог-е операции:

-преобр-я между Кл-ми и встроенными типами,

-выделение памяти для Об класса,

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

Интерфейсные Фун для Поль-ля.

Вопросы:

Поясните принципы структурной методологии разработки программ.

Правила формирования структурированных программ.

Принципы ООП методологии разработки программ.

Поясните концепции ООП.

Поясните шаблон класса на примере класса очередь.

Почему данные Объекта должны быть закрытыми?

На какие категории разделяются Фун-Эл класса?

*** ПиОА_Л8 *** Классы 2

Цель: понять принципы организации Класса:

Конструктор и Деструктор – Фун Класса, механизм наследования

Содержание:

Конструктор и Деструктор – Фун Класса;

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

Пример Класса Очередь

Конструктор (К-р) и Деструктор (Д-р) – Фун Класса

// Инициал-я Объекта при Его объявлении

class QUEUE

 

{public:

 

QUEUE( int n_arr );

// К-р, имя класса !

QUEUE( void );

// Перегрузка К-ра

9

~QUEUE( ); // Д-р, ~имя класса !

int qput( int m );

int qget( void );

. . . . .

};

//Фун-К-р – Инициализация Об - Очереди

//void QUEUE :: init( int n_arr )

QUEUE :: QUEUE( int n_arr ) { floc = lloc = 0;

n = n_arr;

q = new int [n]; clear_q( );

}

Свойства Фун-К-ра

К-р м.б. перегружен (два и более К-ра);

Вызывается при объявлении Об;

В явном виде К-р вызвать нельзя:

Obj.QUEUE( 4 );

Фун-К-р м.б. с параметрами и без пар-в;

К-р и Д-р не возвращают значения !

//Тест для класса QUEUE

main( )

{int n1, k;

< Ввод: n1 >

// Объявление Об

QUEUE q1( n1 );

// и вызов К-ра

// q1.init( n1 );

 

q1.qput( 17 );

 

k = q1.qget();

// k = 17

. . . . . . .

 

}

 

10