Файл: Разработка объектной программы для обработки данных о авторах издательства.docx
Добавлен: 18.03.2024
Просмотров: 153
Скачиваний: 3
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Краткие сведения об объектном подходе
Объект
В широком смысле слова объект – это любая сущность, имеющая некоторый набор свойств (параметров, характеристик) и обладающая некоторым поведением (функциональностью). Под объектом в узком смысле можно понимать некоторое формализованное описание рассматриваемой сущности, т.е. модель исходного объекта
Класс
Класс представляет собой формализованный способ описания однотипных объектов, т.е. объектов с одинаковым набором свойств и методов. При описании класса перечисляются свойства и реализуются методы соответствующих объектов. На основе одного класса можно создать любое число объектов, называемых экземплярами этого класса.
Для использования классов необходимо объявить объектную переменную. Для каждой переменной вводится уникальное имя и указывается принадлежность к одному из известных классов. Это позволяет называть объектные переменные переменными классового типа.
Инкапсуляция
Инкапсуляция позволяет рассматривать объект в виде некоторой достаточно самостоятельной программной единицы, полностью отвечающей за хранение и обработку своих данных
Объединение в рамках объекта некоторых данных и соответствующего программного кода рассматривается как проявление одного из базовых принципов объектного подхода – принципа инкапсуляции. В соответствии с принципом инкапсуляции элементы данных рекомендуется делать недоступными для прямого использования за пределами объекта
Контейнер
Контейнером называется объект, позволяющий хранить и обрабатывать набор некоторых объектов. Вариантами реализации контейнера могут быть на основе:
• на основе массива
• на основе динамических списков разных типов
• на основе поисковых деревьев
• на основе хеш-таблиц
Наследование
Наследованием называется возможность порождать один класс от другого с сохранением всех свойств и методов класса-предка (прародителя, иногда его называют суперклассом) и добавляя, при необходимости, новые свойства и методы. Набор классов, связанных отношением наследования, называют иерархией. Наследование может быть двух видов: простое и множественное.
Наследование называется простым, когда у дочернего класса существует только один родитель, множественным - когда дочернего класса существует более одного родителя.
Полиморфизм
Полиморфизмом называют явление, при котором функции (методу) с одним и тем же именем соответствует разный программный код (полиморфный код) в зависимости от того, объект какого класса используется при вызове данного метода. Полиморфизм обеспечивается тем, что в классе-потомке изменяют реализацию метода класса-предка с обязательным сохранением сигнатуры метода. Это обеспечивает сохранение неизменным интерфейса класса-предка и позволяет осуществить связывание имени метода в коде с разными классами - из объекта какого класса осуществляется вызов, из того класса и берётся метод с данным именем. Такой механизм называется динамическим (или поздним) связыванием - в отличие от статического (раннего) связывания, осуществляемого на этапе компиляции.
Переопределение методов - это возможность объявления в дочернем классе метода, заголовок которого полностью совпадает с родительским методом, но для этого метода существует своя программная реализация.
Переопределение методов основано на двух важных понятиях:
динамическая компоновка программного кода, т.е. подключение необходимых программных модулей непосредственно во время работы программы.
информация о переопределенных в классе методах, доступная механизму динамической компоновки
Динамическая компоновка позволяет создавать такие программные коды, которые могут динамически подключаться в процессе выполнения программы. Данная программа отличается своей гибкостью, но имеет достаточно медленную скорость выполнения. Методы данного класса делятся на две группы: неизменяемые методы (реализация по схеме раннего связывания), изменяемые переопределенные (виртуальные) методы.
Статическая компоновка - это создание полностью готового к выполнению программного кода на этапе разработки программы. При разработке программы компилятор переводит набор программ в машинный код, а компоновщик объединяет остальные программные модули в единое целое. Данный код содержит все необходимые адресные связи и может выполняться без каких - либо дополнительных действий. Преимуществами этого способа являются быстрая скорость выполнения программного кода, а недостатком - жесткость программы.
Интерфейсные классы
Интерфейсный класс - полностью абстрактный класс, в котором все его методы представляют собой только заголовки. Основные значения интерфейсных классов - это построение гибких объектных моделей с возможностью создания обычных классов на основе нескольких интерфейсных классов с обязательной реализацией всех заявленных методов.
Существуют некоторые отличия интерфейсных классов от абстрактных классов:
-
абстрактные классы могут содержать реализацию некоторых методов, а в интерфейсных исключена всякая реализация; -
абстрактные классы поддерживают только простое наследование, а интерфейсные – множественное; -
обычный класс может в качестве родителя иметь только один абстрактный класс, а вот интерфейсов-родителей может быть и несколько; -
абстрактный класс может содержать поля данных, а интерфейсный – либо вообще не может, либо только статические неизменяемые поля
Обобщенные или параметризованные классы
Обобщенный класс – это класс, при описании свойств и методов которого вместо конкретных типов данных можно использовать условные заменители - обобщенные типы данных. Количество используемых обобщенных типов при описании класса может быть любым. Каждый обобщенный тип имеет условное имя, которое и используется при описании полей данных, параметров методов и возвращаемых значений. На основе одного обобщенного класса можно создавать объекты с разными типами данных.
Взаимодействие объектов и классов
Любая программа в объектно-ориентированном программировании реализует ту или иную поставленную задачу с помощью взаимодействия объектов разных классов.
Различают два способа взаимодействия:
-
агрегация (композиция) -
обобщение (наследование)
Агрегация возникает в тех случаях, когда один объект, включает в себя в качестве составных частей другие объекты, т.е. моделирует отношение часть - целое. Строгая агрегация или, композиция возникает тогда, когда существование составного объекта зависит от существования входящих в него частей.
Обобщение возникает в том случае, когда один из классов описывает некоторое достаточно общее понятие, а другие – более конкретные разновидности этого понятия.
- 1 2 3 4 5
Формализованное описание разработанных классов
Класс «Автор»:
TAuthor = class // класс автор
private
AuthorName: string; // фамилия автора
BooksCount: integer; // количество книг
Head: TBook; // ссылка на заголовок
public
constructor Create(aAuthorName: string);
function GetAuthorName(): string;
function GetBooksCount(): integer;
function GetHead(): TBook;
procedure SetAuthorName(aAuthorName: string);
procedure AddFirst(aBook: TBook); // добавляет в начало
function AddAfter(aBook: TBook; aBookName: string): boolean; // добавление после заданного
function AddBefore(aBook: TBook; aBookName: string): boolean; // добавление перед заданным
function Delete(aBookName: string): boolean; // удаление
function Search(aLastName: string): TBook; overload; // поиск обычный
function Search(aLastName: string; var pPrev: TBook): TBook; overload; // поиск с возвратом предшетсвенника
function SumCirculation: integer; // суммарный тираж
end;
Класс «Книга»:
TBook = class // класс книга
private
BookName: string; // название книги
Circulation: integer; // тираж
Next: TBook; // след книга
public
constructor Create(aBookName: string; aCirculation: integer);
function GetNext: TBook;
function GetBookName: string;
function GetCirculation: integer;
procedure SetNext(aNext: TBook);
procedure SetBookName(aBookName: string);
procedure SetCirculation(aCirculation: integer);
end;
Класс «Издательство »:
TPublishing = class // класс издетальство
private
AuthorCount: integer; // количество авторов
AuthorList: array of TAuthor; // динамичесий массив
ObTirag:integer;
public
constructor Create(aSize: integer);
function GetAuthorCount(): integer; // чтение количества авторов
function GetObTirag:integer; // подсчёт общего тиража издательства
procedure AddAuthor(aAuthor: TAuthor);// добавление автора
function DeleteAuthor(): boolean; // удаление автора
function GetAuthor(index: integer): TAuthor; // получает автора по номеру в очереди
function SumCirculation: integer; // суммарный тираж
procedure Save(Filename: string); // сохранение структуры в файл
procedure Load(Filename: string); // загрузка структуры из файла
end
-
Описание демонстрационного модуля
При запуске программы появляется следующее окно:
Рис.8 Оконное приложение
В программе используются компоненты:
StringGrid1, этот компонент используется для отображения информации в табличном виде, где текст распределяется по ячейкам.
Таблица StringGrid состоит из выделенных серым FixedCols и FixedRows - зафиксированных ячеек-заголовков, и обычных, белых ячеек. Содержимое Fixed ячеек недоступно редактированию, и меняется только программно. За возможность редактирования обычных ячеек отвечает значение свойства Edit в Options.
Компонент StringGrid имеет возможность адресации каждой отдельной ячейки по номеру столбца и строки. Содержимое ячейки (i, j), где где i - номер столбца, j - номер строки, имеет вид
StringGrid1.Cells[i, j] и доступно как для чтения, так и для записи. Здесь, как и всегда, номера столбцов ( i ) и строк ( j ) отсчитываются от 0.
Выделенная ячейка таблицы имеет
-
номер столбца: StringGrid1.Col -
номер строки: StringGrid1.Row
Компонент MainMenu не визуальный, то есть, хотя и отображается на прототипе Формы как небольшой квадрат, в работающей программе не будет виден. Опции главного меню создаются с помощью специального редактора. Редактор меню вызывается с помощью двойного щелчка по компоненту MainMenu. Опции этой программы: Сохранить и Загрузить.
SaveDialog и OpenDialog – визуальные компоненты, позволяющие открывать любые файлы и работать с файлами. Диалоги используются для выбора пользователем имени файла, предназначенного для сохранения либо загрузки. FileName – выдает имя файла, заданное по умолчанию.
Компонент Button это простая командная кнопка. Командная кнопка Button используется для реализации в программе команд с помощью обработчика события OnClick этого компонента.
Компонент Label предназначен для отображения статического текста, то есть надписей и меток на Форме, которые не меняются в течение всего времени работы программы. Текст надписи, отображаемый компонентом Label можно изменить только программно.
Компонент Edit представляет собой однострочное текстовое поле, служащее для ввода данных пользователем. Основным свойством компонента Edit, передающим введённую информацию, является свойство Edit1.Text типа String.
Событие KeyPress и UTF8KeyPress компонента Edit позволяют программно контролировать вводимые данные. Так, обработчик события принимает 2 аргумента: Sender: TObject; var Key: Char. Параметр Key отображает последний введенный символ. Для контроля ввода только чисел достаточно проверить находится ли Key в диапазоне цифр от 0 до 9.
Алгоритм сохранения:
-
Соединяем файл с переменной: Assign(f, Filename); -
Открываем файл на запись: rewrite(f); -
проходим по всем авторам: for i := 0 to AuthorCount - 1 do