
- •Часть 2
- •Оглавление
- •1. Структурный подход к программированию
- •1.1. Цели структурного программирования
- •1.2. Основные принципы структурного подхода
- •1.3. Спецификация программ
- •1.4. Метод пошаговой детализации
- •2. Предыстория объектно-ориентированного программирования
- •2.1. Введение в объектно-ориентированное программирование
- •2.2. Тип Объекты
- •2.3. Основные понятия ооп. Инкапсуляция. Наследование
- •X, y : integer; {координаты позиции}
- •XX,yy:array [1..1000] of integer;
- •2.4. Совместимость объектных типов по присваиванию
- •2.5. Описание типа-потомка
- •2.6. Полиморфизм
- •2.7. Виртуальные методы. Конструкторы и деструкторы
- •2.7.1. Правила работы с виртуальными методами
- •3. Типы данных и операторы языка object pascal в delphi
- •3.1. Предопределенные типы данных
- •3.1.1 Вещественные типы
- •3.1.2. Длинные строки
- •3.2. Структурированные типы
- •3.2.1. Множества
- •Var MySet: set of 'a'..'z';
- •3.2.2. Массивы
- •Var FlexArray: array of Real;
- •Var Ints: array of array of Integer;
- •3.2.3. Записи
- •Var Record1,Record2:tDateRec;
- •3.2.4. Указатели
- •I: Integer;
- •V1,v2,v3,v4,v5:Variant;
- •I:Integer;
- •3.3. Типы данных, специфичные для Windows
- •3.3.1. Приведение и преобразование типов
- •3.4. Операторы языка Паскаль
- •I:Integer;
- •I:Integer;
- •3.4.1. Элементы управления редактированием
- •3.5. Процедуры и функции библиотеки vcl
- •4. Реализация ооп на языке pascal
- •V: Real;
- •Наследование
- •Virtual;
- •Конструкторы и деструкторы
- •Перекрытие методов
- •5. Программирование в среде delphi
- •5.1. Основные элементы
- •5.2. Реализация объектно-ориентированного программирования
- •5.3. Разработка интерфейса приложения
- •5.3.1. Создание простейшего Windows-приложения
- •5.3.2. Создание Windows-приложения с метками и кнопками
- •Объект Свойство Значение
- •6.1.3. Меню Edit
- •6.1.4. Меню Search
- •6.1.5. Меню View
- •6.1.6. Меню Run
- •6.1.7. Меню Component
- •6.1.8. Меню Tools
- •6.1.9. Полоска кнопок быстрого доступа SpeedBar
- •6.1.10. Локальные меню. SpeedMenu
- •6.2. Работа с формами
- •6.2.1. Палитра компонентов
- •6.2.2. Object Inspector
- •6.2.3. Написание кода
- •6.2.4. Компиляция проекта
- •6.2.5. Интегрированный отладчик
- •6.2.6. Файлы, создаваемые системой
- •7. Структура delphi-программ
- •7.1. Разработка проекта Dialog
- •7.2. Процедуры вызова диалоговых окон
- •7.3. Преобразования типов
- •Var factW,optW,Rost,Delta:integer;
- •Var factW,optW,Rost,Delta:real;
- •7.4. Простейшие компоненты
- •7.4.1. Группы радиокнопок - компоненты RadioGroup, RadioButton, GroupBox
- •7.4.2. Компоненты выбора из списков - ListBox, ComboBox
- •7.4.3. Многострочные окна редактирования Memo и Richedi
- •7.4.4. Графические объекты
- •If OpenDialog1.Execute
- •Image1.Picture.LoadFromFile
- •7.4.5. Канва и пиксели
- •X, y :real; // координаты функции
- •7.4.6. Воспроизведение немых видео клипов – компонент Animate
- •7.4.7. Установка и настройка приложения: работа с файлами *.Ini
- •IniFile.Free;
- •Упражнения
- •8. Репозиторий объектов и эксперты
- •8.1. Страницы репозитория объектов
- •8.1.1. Страница New
- •8.1.2. Страница Forms
- •8.1.3. Страница Dialogs
- •8.1.4. Страница Data Modules
- •8.1.5. Страница Projects
- •8.2. Эксперты Delphi
- •8.2.1. Application Expert
- •8.2.2. Dialog Box Expert
- •9. Классы и модули
- •9.1. Классы и сокрытие информации
- •9.2. Классы и модули
- •9.3. Модули и область видимости
- •9.4. Модули и программы
- •9.5. Информация о типе на этапе выполнения
- •If MyAnimal is Dog then …
- •If MyAnimal is Dog
- •If MyAnimal is Dog then
- •10. Использование компонентов
- •10.1. Буксировка из одного компонента в другой
- •10.2. Обработка исключений
- •10.3. Восприятие ввода для пользователя
- •Val( Edit1.Text,Number,Code);
- •Val((Sender as tEdit).Text,Number,Code);
- •11.2. Различные роли элементов меню
- •11.3. Редактирование меню с помощью Menu Designer
- •If OpenDialog1.Execute
- •If SaveDialog1.Execute
- •Procedure tForm1.ViewEdit1Click(Sender:tObject); begin
- •If Panel1.Visible
- •If Buttons1.Enabled
- •12. Получение «ввода от мыши» и рисование в форме
- •12.1. События, связанные с мышью
- •12.2. Рисование в форме
- •If ssShift in Shift
- •If Circle then Canvas.Ellipse(Center.X-Radius.X,Center.Y-
- •Else Canvas.Rectangle(Center.X-Radius.X,Center.Y-
- •12.3. Черчение и рисование в системе Windows
- •13. Инструментальная линейка и строка состояния
- •13.1. Построение инструментальной линейки
- •Procedure tForm1.SpeedButton1Click(Sender:tObject); begin
- •If SpeedButton1.Down
- •13.2. Добавление всплывающих подсказок в линейку
- •13.3. Комбинированный список в инструментальной линейке
- •13.4. Построение строки состояния
- •14.1. Добавление второй формы в программу
- •14.2. Создание диалоговой панели
- •Задание № 1
- •Procedure tForn1.BitBtnClick(Sender:tObject); begin PageControl1.SelectNextPage(true);
- •Do ListBox1.Items.Add(PageControl1.Page[I].Caption);
- •14.3.1. Блокнот с набором ярлыков
- •If FontDialog1.Execute
- •15.2. Жизненный цикл программного средства
- •15.3. Понятие качества программного средства
- •15.4. Обеспечение надежности основной мотив разработки программных средств
- •15.4.1. Методы борьбы со сложностью
- •15.4.2. Обеспечение точности перевода
- •15.4.3. Преодоление барьера между пользователем и разработчиком
- •15.4.4. Контроль принимаемых решений
- •Литература
- •Часть 2. Объектно-ориентированное программирование
1.3. Спецификация программ
Спецификация модуля включает в себя:
Проектирование:
описание функции модуля;
описание интерфейса модуля с другими модулями, т. е. описание тех данных, которыми модуль обменивается с другими модулями при вызовах;
разработка руководства по модулю для пользователя и согласование с пользователем.
Планирование:
распределение работы между группой исполнителей;
определение очередности реализации;
определение способа отладки и способа проверки достоверности результатов.
4) проработка тестовых заданий, которые проверяют работу программы. Они должны быть продуманы и разработаны до начала написания программы.
Этап реализации:
1) написание модуля;
2) отладка;
3) документирование (в соответствии с ЕСПД – единой системой проектной документации);
4) сдача конечного продукта.
1.4. Метод пошаговой детализации
Метод пошаговой детализации – еще одно средство создания структурированных алгоритмов. Сущность метода состоит в том, что проектирование алгоритма разбивается на ряд последовательных шагов. На первом шаге задача рассматривается укрупненно, обобщенно, и описывается полный алгоритм ее решения таким образом, чтобы он представлял простую структуру или комбинацию простых структур. На втором шаге мы просматриваем наш алгоритм и те действия, которые недостаточно детализированы, уточняем таким образом, чтобы эти уточнения также представляли собой простую структуру или элементарную комбинацию простых структур. При этом могут быть две формы уточнения: в рамках того же самого алгоритма или отдельно от алгоритма в качестве заголовка выносится действие, которое надо уточнить, и уточняется.
На третьем и последующих шагах мы повторяем выполненное на втором шаге для тех действий, которые содержатся в предыдущих уточнениях.
Процесс заканчивается тогда, когда все действия оказываются достаточно элементарными для программирования.
Правила пошаговой детализации
Не следует спешить сразу работать над мелкими деталями. На каждом шаге нужно делать небольшие уточнения.
По мере детализации нужно внимательно следить за данными (можно составлить таблицу идентификаторов). Следует избегать использования одинаковых имен в разных смыслах.
Надо быть готовым вернуться назад и отказаться от какой-то детализации, которая ведет в тупик.
2. Предыстория объектно-ориентированного программирования
Объединение данных с алгоритмами является естественным для образа мышления человека. Кроме того, объединение такого рода конгломератов по некоторым признакам в классы является не только следствием привычного образа мышления, но и удобным средством для декомпозиции и упрощения структуры программ. Сначала следует выяснить, какие принципы необходимы (и достаточны) для практического применения таких объединений в программировании.
Довольно давно, практически сразу после появления языков третьего поколения (в 1967 году), некоторые исследователи решили несколько преобразовать постулат фон Неймана о том, что данные и программы неразличимы в памяти машины: пусть данные и программы если не станут одним и тем же, то сильно к этому приблизятся. Разрабатывая систему моделирования сложной системы, они столкнулись с задачей, решение которой без декомпозиции оказалось невозможным. Попытки обосновать декомпозицию и привели к уже полученным нами выводам. Недостатком можно считать чрезмерную «размытость» подхода, его объяснение скорее на уровне понимания и интуиции, чем на уровне правил [1]. Наконец, усилия многих программистов и системных аналитиков, направленные на формализацию подхода, увенчались успехом.
Были разработаны три основополагающих принципа того, что потом стало называться объектно-ориентированным программированием (ООП): наследование, инкапсуляция, полиморфизм.
Результатом их первого применения стал язык Simula-1, в котором был введен новый тип - объект. В описании этого типа одновременно указывались данные (поля) и процедуры, их обрабатывающие, - методы. Родственные объекты объединялись в классы, описания которых оформлялись в виде блоков программы. При этом класс можно использовать в качестве префикса к другим классам, которые становятся в этом случае подклассами первого. Впоследствии Simula-1 был обобщен и появился первый универсальный объектно-ориентированный язык программирования Simula-67 (67 - по году создания).
Пределом объектной ориентации принято считать SmallTalk, в котором доступ к полям объектов возможен только через их методы.
Как выяснилось, ООП оказалось пригодным не только для моделирования (Simula) и графических приложений (SmallTalk), но и для большинства других приложений, а его приближенность к человеческому мышлению и возможность многократного использования кода сделали его одной из наиболее часто используемых концепций в программировании.
Разберем три принципа, которые стали почти достаточными для реализации концепции ООП. Предварительно введем определения слов объект и класс.
Объект - совокупность (разнотипных) данных (полей объекта), физически находящихся в памяти ЦВМ, и алгоритмов, имеющих доступ к ним.
Каждый объект может обладать именем (идентификатором), используемым для доступа ко всей совокупности полей, его составляющих. В предельных случаях объект может не содержать полей или методов.
Класс - тип (описание структуры данных и операций над ними), предназначенный для описания множества объектов.
Каждый класс может иметь подклассы - классы, обладающие всеми или частью его свойств, а также собственными свойствами. Класс, не имеющий ни одного представителя (объекта) обычно называют абстрактным.