Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SHPORS~1.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
201.73 Кб
Скачать

3. Парадигма модульности (локализации).

Акцент при разработке программ сместился от проэктирования процедур в сторону организации данных. Эта парадигма известна также как «принцип сокрытия данных»

Задачи: небольшая сложность, большая, сложная конструкция данных.

Модуль – программная единица, которая транслируется отдельно.

Я/п: Фортран 54, Борланд С++, Visual C++, Visual Basic. Паскаль не поддерживает, Turbo Pascal, Delphi поддерживают.

Языковые средства: отдельная трансляция различных единиц программы.

Пример: реализация стека. 1. Стек должен иметь унификационный интерфейс. 2. Предупредить попытки доступа к стеку в обход интерфейса стека. 3. Реализация такая, что до первого использования стек должен быть инициализирован.

//stack.h #define stack_size 100 #define stack_count 3 int stack_10 void push (char C); char pop ();

//stack.c #include “stack.h” static char[stack_size]; static char *sp=st+stack_size; void push(char C) {st[--sp]=C; } char pop() {return st[sp++];}

#include “stack.h” void main() {push(‘C’); if (‘C’=pop()) Error….}

«Принцип сокрытия данных» проявляется в след: имена переменных, констант, функций могут быть сделаны локальными в модуле.

Недостатки модульности: 1. Использование «типа» стек остается неизвестным для компилятора. 2. На этапе выполнения отсутствует контроль за инициализацией и присваиванием.

Ошибки, характерные для этого стиля программирования: 1. Забыли создать экземпляр. 2. Забыли удалить экземпляр. 3. Попытка использования после удаления. Например: T #pt; pt=new T; delete pt; *pt=…

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

Когда программа разработана в виде набора модулей, обработка ошибок должна рассматриваться в свете модулей. Какой модуль несет ответственность за обработку тех или иных ошибок? Часто модуль, обнаруживший ошибку, не знает, какие действия нужно предпринять. Например, переполнение стека.

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

4. Парадигма атд.

В модульности невозможно тиражирование экземпляров типов данных, созданных в модуле. C++ - typedef, Pascal – type.

Тип данных: область - допустимых значений, множество допустимых операций. C++ - class{}, struct, Pascal – record;

В С++ эта проблема решается путем предоставления пользователю возможности непосредственно определять типы, которые ведут себя почти как встроенные. Такой тип часто называют абстрактным типом данных.

сlass complex{float Re, Im; public: friend complex operator + (complex a, complex b); complex ( ) {Re=0;Im=0;}//конструктор complex ( float r ) {Re=r; Im=0;} complex (float r, float i ) {Re=r; Im=i;} ~complex ( ) {}; //деструктор

ostream&operator<< (ostream&o, complex c);}

void f ( ) {complex a, complex b=1; complex c = complex (2,3); complex d=a+b; cout <<”d=”<<d;}

Метод представления знаний – фреймы.

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

Языковые средства: оператор class, описатели ограничения доступа к классу, возможность перегрузки имен функций и символов операции.

Я/п: С++, Object Pascal. Поддерживают стиль: Turbo Pascal, C.

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

Например, библиотека графических примитивов.

class shape {int x,y;int color;int hidden; pubic: shape();{…};…;shape{…}; void show(); void hide(); void drow(); void move (int x; int y); void shape::drow() shape circle; if(kind==1){drowcircle};else if(kind==2){drow dot;}; else {drow square}}} circle.show();

Недостаток примера: один раз определенный объект типа shape далее самостоятельно не адаптируется ко внешним переменам, например, в программу надо добавить еще один граф объект (star).

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

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