
- •4.1.Стили программирования. Принципы разработки больших программ. Жизненный цикл больших программ. Примеры использ-я в соврем. Языках прогр-ия принципов разработки программ.
- •Interface
- •Implementation
- •Var m_cl_1 : My_class; - Это бъект
- •4.3.Объекты и классы. Разработка классов и объектов пользователей. Состав классов: поля, методы, свойства. Перегружаемые и перекрываемые методы классов. Примеры описания и использования.
- •Int k; free(item)
- •4.5.Объекты и классы. Структура класса: поля, методы, свойства. Разработка классов пользователей с динамическими структурами данных типа объект-таблица. Пример описания класса.
- •4.6.Структура данных типа списков. Варианты организации списков. Операции над списками. Примеры программирования операций над списками разных типов.
- •4.7.Структуры данных типа таблица. Способы организации таблиц. Основные операции над табличными структурами. Организация поиска в таблицах. Примеры операций поиска в таблицах.
- •11010 Результат 01001
- •4.8.Решение задачи сортировки в массивах разных структур. Сравнение алгоритмов сортировки: методом вставки, включения, шейкер сортировки и быстрой сортировки. Примеры использования.
- •4.10.Структуры данных типа дерева. Основные операции над бинарными деревьями. Решение задачи сортировки с помощью дерева. Примеры программирования операций над деревьями.
4.3.Объекты и классы. Разработка классов и объектов пользователей. Состав классов: поля, методы, свойства. Перегружаемые и перекрываемые методы классов. Примеры описания и использования.
Класс – это структура (абстрактный тип данных), компонентами которой являются хранимые данные, их свойства и методы для их обработки.
Событие класса – внешнее событие, на которое реагирует данный класс
Объект – это экземпляр класса, его конкретная реализация.
Объект или экземпляр класса – это переменная, обеспечивающая доступ к полям и методам класса в конкретной среде применения.
type date = class
private
dd, mm, yy: integer;
public
procedure init (d, m, y: integer);
function month: integer;
function day: integer;
function year: integer;
end;
procedure date.init (d, m, y: integer);
begin
dd := d; mm := m; yy := y;
end;
function date.day: integer;
begin
result := dd;
end;
В состав классов входят:
1. Поля – типизированные данные для хранения внутр. состояния объекта.
2. Методы – это действия, выполняемые над полями объекта.
3. Свойства обеспечивают реализацию механизма доступа к полям класса. Доступ к ним осуществляется только через промежуточный код. Зарезервированные слова: property, read, write. Свойство обязательно соотносится с конкретным полем класса и определяет те методы класса, которые должны использоваться при записи в это поле или при чтении из него конкретных значений параметров.
Создание класса – это создание нового типа данных. В процессе создания класса мы указываем род и объем данных, который может хранить новый тип, а также набор действий, допустимый для нового типа. После этого можно использовать новый класс для создания переменных нового типа – объектов.
Методы – это процедуры и функции для обработки данных, которые принадлежат классу.
Особые методы - конструктор и деструктор. Первый выделяет адрес в памяти для класса и его методов, производит связывание виртуальных методов, а второй выгружает из памяти объекты класса. Деструктор освобождает память.
Constructor Create() - Создание экземпляра класса
Destructor Destroy() - Уничтожение экземпляра класса
Любой созданный класс может наследовать свои свойства другим классам.
Перекрытие или переопределение методов
Если в классе-потомке объявляются методы, имена которых совпадают с именами методов в родительском классе, то говорят, что эти методы перекрываются. Статические методы, при переопределении, полностью перекрываются в классе-потомке. При этом можно изменять количество и типы параметров в заголовке метода.
При перекрытии виртуальных и динамических методов требуется сохранять количество и тип параметров в заголовках методов.
Перекрываемый метод из родительского класса может быть вызван внутри методов класса-потомка. Для этого используется специальная директива inherited.
Для того чтобы изменить поведение виртуальных или динамических методов у потомка (переопределить метод или перекрыть) используется служебное слово override.
Перегружаемые методы
В Object Pascal допускается определение в одном классе нескольких методов с одинаковыми именами, но разными списками параметров. Такие методы называются перегружаемыми, они объявляются при помощи директивы overload. С их помощью можно присваивать одинаковые имена родственным методам. Выбор конкретной версии метода, применимой в данных обстоятельствах, осуществляется компилятором.
Overload перегружаемые |
Function divide (x,y:integer):integer;overload; Function divide(x,y:real):real;overload; |
Override Перекрываемые (Перезаписываемые) |
Procedure Cut_arr ; override; Указание, что метод перезаписывается |
4.4.Объекты и классы. Структура класса: поля, методы, свойства. Области видимости полей классов. Разработка классов пользователей с динамическими структурами данных типа объект-вектор. Пример описания класса.
Класс – это структура (абстрактный тип данных), компонентами которой являются хранимые данные, их свойства и методы для их обработки.
Событие класса – внешнее событие, на которое реагирует данный класс
Объект – это экземпляр класса, его конкретная реализация.
Объект или экземпляр класса – это переменная, обеспечивающая доступ к полям и методам класса в конкретной среде применения.
В состав классов входят:
1. Поля – типизированные данные для хранения внутр. состояния объекта.
2. Методы – это действия, выполняемые над полями объекта.
3. Свойства обеспечивают реализацию механизма доступа к полям класса. Доступ к ним осуществляется только через промежуточный код. Зарезервированные слова: property, read, write. Свойство обязательно соотносится с конкретным полем класса и определяет те методы класса, которые должны использоваться при записи в это поле или при чтении из него конкретных значений параметров.
Связывание метода с объектом – это механизм поиска метода объектом
способа связывания: 1). Статическое, 2). Динамическое, 3). Виртуальное
Разделение методов и полей по доступности обеспечивает защиту информации.
Видимость полей классов определяет режим наследования полей классов или режим их доступности в других модулях.
Секция private. Область видимости методов минимальна – только для внутренних методов объявленного класса. Производные классы не могут использовать поля, методы и свойства, описанные в private. Члены класса недоступны даже в наследниках.
Секция protected. Обеспечивает доступ к методам для самого класса, а также для любых его потомков.
Секция public. Никаких ограничений на видимость методов, типов, свойств класса не накладывается. Т.е. члены класса доступны везде, где доступно описание класса.
Секция Published – элементы класса доступны везде. Эти элементы можно редактировать в процессе выполнения программы.
Р
class
CVector
{
private:
int
item[];
public:
CVector(int size);
~CVector();
void addItem(int index,
int newItem);
void delItem(int index);
int getItem(int index);
void clear();
void setSize(int newSize);
int getSize();
int findItem(int
itemToFind);
void
sort(); };
Динамические структуры данных любого типа – вектор, список, таблица – объявляются без описания их размерности. В процессе решения задач размерности этих структур могут меняться.
Динамические массивы размещаются в динамической области памяти. Математическая интерпретация массива – вектор. Векторы могут быть любой размерности – одномерные, двумерные и т.д. Двумерный вектор – таблица. Процедура для задания размерности динамического массива любого типа должна быть выполнена до записи данных в элементы массива. Размерность массива может быть определена в процессе решения задачи методом setSize.
Класс должен включать в себя методы:
изменение размерности if (newSize >= 0) realloc(item, newSize*sizeof(int));
получение текущей размерности return msize(item);
запись элемента в указанную позицию (память д.б. распределена заранее)
if (index >= 0 && index < getSize())
item[index] = newItem;
удаление элемента по указанной позиции, память не освобождается
if (index >= 0 && index < getSize())
item[index] = 0;
поиск элемента
for (int i = 0; i < getSize(); i++)
if (item[i] == itemToFind)
return i;
return -1;
сортировка 7. освобождение памяти