ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 19.04.2024

Просмотров: 127

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

1 Основные принципы перегрузки операций

Запреты на перегрузку операций

3 Структуры

Доступ к элементам структур

Динамическое распределение памяти

Связанные списки

Очереди

7. Программные продукты и их основные характеристики: основные понятия программного обеспечения; характеристики программных продуктов; защита программных продуктов; классификация программных продуктов

4. Классы программных продуктов

1) Составление технического задания на программирование

2) Составление технического проекта

3) Создание рабочей документации (рабочего проекта)

4) Ввод в действие

1) Диалоговый режим

2) Графический интерфейс пользователя

9. Сети эвм и протоколы передачи информации:

10. Экспертные системы: архитектура, типы решаемых задач, методика построения, области применения. Различные подходы к построению систем ии.

11. Понятие модели данных. Иерархическая, сетевая, реляционная, объектная модель. Типы структур данных. Операции над данными. Ограничения целостности.

2.3. Иерархическая модель данных (имд)

12. Нормализация отношений. Нормальные формы. Запросы и операторы манипулирования данными. Язык запросов sql.

Защищенные элементы.

Все функции программы имеют доступ к открытым элементам базового класса. Доступ к закрытым элементам базового класса имеют только элемен­ты-функции самого класса и его «друзья».

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

Элементы производного класса могут вызывать открытые и защищенные элементы базового класса просто по имени элемента. При этом не обязательно использовать операцию разрешения области действия - по умолчанию имеет­ся в виду текущий объект.

Сложное наследование.

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

Абстрактные базовые классы и конкретные классы

Когда мы говорим о классе как о типе, мы подразумеваем, что будут созда­ваться объекты этого типа. Однако во многих случаях бывает полезно опреде­лять классы, объекты которых не будут создаваться. Такие классы называют­ся абстрактными классами. Поскольку они используются в наследовании в качестве базовых классов, мы будем называть их абстрактными базовыми классами. Объекты абстрактного базового класса создавать нельзя.

Единственная цель определения абстрактного класса состоит в том, чтобы предусмотреть обобщенныйбазовый класс, на основе которого строится иерар­хия наследования. Классы, для которых могут создаваться объекты, называ­ются конкретными классами.Например, мы могли бы определить абстрактный базовый класс TwoDimensionalObject и произвести от него классы типа Square, Circle, Triangle


3 Структуры

Описание структур

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

Структуры — это производные типы данных, они создаются из объектов других типов. Рассмотрим следующее описание структуры;

struct card

{

char *face;

char *suit;

};

Ключевое слово struct определяет структуру. Идентификатор card являет­ся именем-этикеткой структуры. Имя-этикетка именует структуру, и испо­льзуется совместно с ключевым словом struct для объявления переменных типа структуры. В данном примере тип структуры - struct card. Перемен­ные, объявленные внутри скобок структуры, являются элементами структу­ры Определение struct card содержит два элемента типа char * - face и suit.

Объявление

struct card a, deck[52], *cPtr;

объявляет а - переменную типа struct card, deck - массив из 52 элементов типа struct card и cPtr - указатель на struct card. Можно объявить перемен­ные данной структуры и по-другому, разместив разделенный запятыми список переменных между закрывающей скобкой определения структуры и точкой с запятой, завершающей ее определение. Например, указанное выше объявле­ние, объединенное с определением структуры, будет выглядеть следующим об­разом:

struct card

{

char *face;

char *suit;

} a, deck[52], *cPtr;

Имя-этикетка не является для структуры обязательным. Если определе­ние структуры не содержит имя-этикетку, переменные для этой структуры могут быть объявлены только в определении структуры, но не отдельным объ­явлением.

Инициализация структур

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


struct card a = {"Three", "Hearts"};

создает переменную а типа struct card (структура определена выше) и присваи­вает элементу face значение "Three", а элементу suit значение "Hearts", Если инициализаторов в списке меньше, чем элементов в структуре, остальным эле­ментам автоматически присваивается значение 0 (или NULL, если элемент — указатель). Переменным-структурам, объявленным вне определения любой функции (т.е. глобально) присваиваются 0 или NULL, если они явно не иници­ализированы во внешнем объявлении. Структуры можно инициализировать и с помощью оператора присваивания. При этом можно либо присвоить перемен­ной-структуре переменную того же типа, либо присвоить значения отдельным элементам структуры,

Доступ к элементам структур

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

printf("%s", a.suit);

Операция указателя структуры, состоящая из знака минус (-) и знака бо­льше (>) без пробела между ними, обращается к элементу через указатель структуры. Предположим, что переменная aPtr была объявлена как указатель на struct card и ей был присвоен адрес структуры а. Чтобы напечатать эле­мент suit структуры а при помощи указателя aPtr, напишите оператор

printf ("%s", aPtr->suit);

Typedef

Ключевое слово typedef предоставляет программисту механизм для созда­ния синонимов (или псевдонимов) для ранее определенных типов данных. Ча­сто используют typedef для того, чтобы дать укороченное имя структурному типу. Например, оператор

typedef struct card Card;

определяет новый тип с именем Card, как синоним типа struct card. Пишу­щие на С часто используют typedef, чтобы определить тип структуры, при этом отпадает необходимость в имени-этикетке, Например, следующее опре­деление

typedef struct

{


char *fасе;

char *suit;

} Card;

создает тип Card без использования отдельного оператора typedef.

Теперь Card можно использовать для объявления переменных типа struct card. Объявление

Card deck [52];

описывает массив, состоящий из 52 структур Card (т.е. переменных типа struct card).

Объединения

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

Объединение объявляется с помощью ключевого слова union. Формат объ­явления тот же, что и в случае структуры. Объявление union

union number

{

int x;

float y;

};

означает, что number является типом union с элементами int x и float у..

При объявлении объединение можно инициализировать только значения­ми того же самого типа, что и его первый элемент. Например, в представлен­ном выше объединении объявление

union number value = {10};

однако объявление следующего вида будет ошибочным:

union number value = {1.43};

Структуры, ссылающиеся на себя

Мы уже изучали ранее структуры данных фиксированного размера, та­кие, как одномерные массивы, двумерные массивы и структуры. В этой главе будут рассмотрены динамические структуры данных, размер которых, может увеличиваться или уменьшаться при исполнении программы


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

struct node

{

int data;

struct node *nextPtr;

};

описывает тип struct node. Структура типа struct node состоит из двух элемен­тов - целого data и указателя nextPtr. Элемент nextPtr указывает на структу­ру типа struct node - структуру того же самого типа, что и только что объявленная нами, отсюда и термин «структура, ссылающаяся на себя». Эле­мент nextPtr иногда называют связкой, т.е. nextPtr можно использовать для того, чтобы связать структуру типа struct node с другой структурой того же типа Рис. 4 иллюстрирует две структуры, ссылающиеся на себя, связанные друг с другом и образующие список. Заметьте, что в связывающем элементе второй структуры нарисована представляющая указатель NULL косая черта, чтобы показать, что этот элемент не указывает на другую структуру. Указатель NULL обычно обозначает конец структуры данных, так же как символ NULL обозначает конец строки.

Рис. 4 Две ссылающиеся на себя структуры, связанные друг с другом