Конспект лекций по дисциплине «Высокоуровневые методы информатики и программирования» для студентов специальности 080801 «Прикладная информатика в экономике»
Содержание1.Теоретические основы объектно-ориентированного программирования 1.1. От процедурного программирования к объектному Структурное программирование Метод пошаговой детализации Пример 1.1. Процедурная декомпозия (программа 1.2. Основные принципы и этапы объектно-ориентированного программирования Ограничение доступа Иерархия «целое/часть» Иерархия «общее/частное» Объектно-ориентированные языки программирования. Таблица 1.1. Сравнительные характеристики моделей ООП в некоторых средах программирования Ограничение доступа Этапы разработки программных систем с использованием ООП. 1.3.Объектная декомпозиция Пример 1.2. Колонка 1 - Колонка 3 Пример 1.3. Декомпозиция объекта (Блок колонок) Пример 1.4. Простейший графический редактор Пример 1.5. Объектная декомпозия (программа «Записная книжка») 1.4.Объекты и сообщения Класс Окно Ограничение доступа. Конец описания. Класс Файл 1.6.Основные средства разработки классов Пример 1.8. Класс Окно_меняющее_цвет – родитель: класс Окно Простой полиморфизм. Пример 1.9. Класс Окно_с_текстом – родитель: класс Окно Сложный полиморфизм или создание полиморфных объектов. Пример 1.10. Сложный полиморфизм Класс Сообщение Пример 1.12. Наполнение (класс Функция) Класс Триада Класс Функция 1.7. Дополнительные средства и приемы разработки классов Делегирование методов. Пример 1.13. Делегирование методов (класс Фигура) Класс Фигура1 Конец описания. Класс Фигура2 Класс Методы_рисования Контейнерные классы. Пример 1.14. Класс Элемент Класс Список Пример 1.15. Класс Список Конец описания. Параметризованные классы. Пример 1.16. Шаблон классов Список(Тип_элемента) Список (Запись1) 2.Средства объектно-ориентированного программирования в языке Borland Pascal 7.0 2.1.Определение классов Type = object Begin End Пример 2.17. Описание класса (класс Окно) Program WinOb Writeln(Cf,' - ',GetSizeX,' - ',GetSizeY ) Writeln(Winvar.Cf,' - ', Winvar.GetSizeX,' - ',Winvar.GetSizeY ) Type Rec = Record В результате использования механизма наследования отпадает необходимость заново описывать уже существующие в классе-родителе пол Field identifier expected Type =Object( Program SymbOb Cf,Cs, {цвет фона и символов} Col,Line:byte Procedure MakeWin Пример 2.19. Использование наследования (классы Окно и Символ) Type Symb = Object(Win) Procedure Print Присваивание объектов Var Winvar : Win Var Winvar : ^Win Winvar := Symbvar Простой полиморфизм Type Lot = Object(Symb) Begin Symbvar.Init(1,1,80,25,7,1,40,12,'A') Сложный полиморфизм. Program MetVirt Procedure Run End; Procedure Win.Print; Begin End Пример 2.22. Использование процедуры с полиморфным объектом Program PrPolOb Procedure Print; virtual Var V1:Win; V2:Symb; V3:Lot TypeOf: TypeOf SizeOf: SizeOF Const V1:Win=(X1:20;Y1:5;X2:40;Y2:15;Cf:12) 2.4.Динамические объекты New (); б) функция :=New New (, ()); б) функция := New Function HeapFunc(size:Word):integer; far Пример 2.23. Динамический объект с динамическим полем и контролем выделения памяти Program DinObj Constructor Init(An:Vaw) End; Constructor WinD.Init Begin HeapError:=@HeapFunc Пример 2.24. Статический объект с динамическим полем и контролем выделения памяти Var W :WinD Begin HeapError:=@HeapFunc Пример 2.25. Использование динамических объектов (программа «Снежинки») Program SnowOb Constructor Init V^[1]:=Random(GetmaxX); V^[2]:=Random(GetmaxY) End; Constructor Snow1.Init; Begin Snow.Init; Vh:=Vhn End Var S : array[0..N] of ^Snow 2.5.Создание библиотек классов Unit ; Interface Begin {раздел инициализации} {вызовы конструкторов экспортируемых объектов} End Пример 2.26. Размещение описания класса в модуле Следует иметь в виду, что только после создания модуля Obj_unit.tpu скрытые поля и методы с помощью директивы private будут недо Field identifier expected 2.6.Композиция и наполнение Пример 2.27. Использование объектных полей Program Compos Procedure Print End; Procedure Win.Init Пример 2.28. Program MoveCir Procedure Out Procedure Control Procedure CrCr(P1,P2:Cp) End; Var i,j:integer Clrscr; Writeln('Введите:':20) Write('размер зоны по оси Y - '); readln(ly) Write('задержку - '); readln(d) 2.7.Разработка программ с использованием объектно-ориентированного программирования на языке Borland Pascal 7.0 Пример 2.29. Программа «Текстовые эффекты» На первом этапе Второй этап На третьем этапе End; Procedure Cchar.Print Procedure LinMovX.Tie Procedure LinMovY.Move V[1]:=pi; for i:=2 to L do V[i]:=V[i-1]+D Var Sx1,Sx2:LinMovX; Sy1,Sy2:LinMovY; Sc1,Sc2:LinMovCir Создание приложений Windows Семейство операционных систем Windows с точки зрения программиста Системная поддержка виртуального пространства памяти до 4 Гбайт для каждого приложения Win32. Возможность одновременной работы с несколькими приложениями и/или несколькими функциями приложений (многозадачность). Стандартный графический интерфейс с пользователем Независимость программ от аппаратуры (в том числе - универсальная графика). Возможность обмена данными между приложениями. Совместимость с ранее разработанным программным обеспечением DLL (Dynamic Link Library Структура приложения Windows Технология разработки приложений Windows в средах Delphi и С++Builder WM_CHAR. В зависимости от того, какая именно кнопка мыши была нажата, этот метод может вызывать: обработчик события OnKeyPress Пример 3.30. Unit MainUnit InPutEdit, OutPutEdit: TEdit Var MainForm: TMainForm End; {обработчик события «нажатие клавиши Enter при вводе значения»} Procedure TMainForm.InPutEditKeyPress(Sender: TObject MessageDlg('Значение содержит недопустимые символы.', mtError, [mbOk], 0) Procedure TMainForm.NextButtonClick(Sender: TObject) Program Example1 Пример 3.31. Приложение «Возведение чисел в квадрат» (вариант 2) MessageDlg("Строка содержит недопустимые символы." WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) Объектная модель Delphi Pascal Определение класса Type = class( Borland Pascal 7.0 Constructor TNum.Create Destructor Destroy; override Destructor TNum.Destroy Таблица 3.2. Особенности работы с объектами в Delphi Var A, B:TNum Пример 3.32. Form1: Name:=MainForm; Caption:='Графический редактор “Окружность”'; Bevel1 Unit Circul End; Procedure TMyCircul.Clear End; Procedure TMainForm.ImageMouseDown(Sender: TObject C.Draw; {изобразить объект с заданными параметрами} end End; Procedure TMainForm.ColorButtonClick(Sender: TObject) Особенности реализации полиморфизма Виртуальные методы Динамические методы. Абстрактные методы. Пример 3.33. Unit Figure Перегрузка методов. Перегруженный метод Type TSomeClass = class Type T1 = class(TObject) Type T1 = class(TObject) Type T1=class A.Value :=n Unit Circul MyObject[k+2,s] :=1 Пример 3.35. Unit MasByte Function Delete(Ind:byte):byte Индексируемые свойства (свойства со спецификацией index). Type CMas=class Ссылка на класс (метакласс). Type TClass=class of TObject Методы класса. Type MyClass=class(TObject) Механизм определения типов на этапе выполнения программы. Таблица 3.3. Структура ТВМ ShortString(Pointer(Pointer(Integer(TEdit) - 32)^)^). Пример 3.36. Unit Spisok IOEdit.Text:=inttoStr((v as TNumber).MyNum) Type TMyClass=class Пример 3.37. Делегирование методов (графический редактор «Окружности и квадраты» - вариант 2) 1: C.Draw:=C.DrawSquare Begin if Cnil then Unit Figure Begin if Cnil then Библиотека стандартных классов Delphi Procedure CleanupInstance Function ClassType: TClass Procedure Dispatch(var Message) Function FieldAddress(const Name: ShortString): Pointer Function SafeCallException(ExceptObject: TObject Оконные элементы управления Графические элементы управления Type TMainForm = class(TForm) Пример 3.38. Использование отношения «старший-младший» (приложение «Определение вида четырехугольника») Type TMainForm = class(TForm) End; Procedure TMainForm.AllEditKeyPress(Sender: TObject; var Key: Char) S:=chr(ord('A')+ActiveControl.TabOrder div 2) Создание и обработка сообщений и событий Type TMessage=record Const Mes1 = WM_USER Генерация сообщения. WParam, LParam:LongInt):LongInt Пример 3.39. Message wm_mymessage Form2.Perform (WM_MYMESSAGE,Longint(MessageEdit.Text),0) Пример 3.40. Message wm_mymessage Управление циклом обработки сообщений. Пример 3.41. ProgressBar.Parent := Self Button.Left:=60; Button.Top:=65 Обработка исключений Структура фрагментов с исключениями Создание исключений Type Exception = class(TObject) Constructor CreateRes(Ident: Integer; Dummy: Extended = 0) Constructor CreateHelp(const Msg: string; AHelpContext: Integer) Constructor CreateResHelp(Ident: Integer; AHelpContext: Integer) Генерация исключений Обработка исключений Unit MasByte Procedure SetEl(Ind:byte;m:byte) Function TMasByte.GetEl(Ind:byte):byte