X Код для використання на сайті:
Ширина px

Скопіюйте цей код і вставте його на свій сайт

X Для завантаження презентації, скористайтесь соціальною кнопкою для рекомендації сервісу SvitPPT Завантажити собі цю презентацію

Презентація на тему:
"Класи в Pascal"

Завантажити презентацію

"Класи в Pascal"

Завантажити презентацію

Презентація по слайдам:

Слайд 1

Класи в Pascal

Слайд 2

Об’єкти реального світу можна описати за допомогою величин, що характеризують стан об’єкта та його поведінку (що робить об’єкт або що з ним можна робити), поведінка змінює стан об’єкта. Для адекватного моделювання реального світу в програмах, потрібно мати сутність, яка поєднує дані та алгоритм. boolean integer (const) real real procedure function Ручка Готовність Розмір Ціна Колір Колір чорнила Запас чорнила Увімкнути Вимкнути Записати Змінитичорнило

Слайд 3

Unit Pen_unit; type Tpen = class private ready: boolean; price: real; colour: TColor; paintColour: TColor; paintSupply: real; public function isReady: boolean; procedure SwitchOn; procedure SwitchOff; дані методи оголошення Оголошення класу відбувається в модулі, але це можна робити і в головній програмі.

Слайд 4

procedure Write (aWord: string); procedure Rechange (aPaint: TColor); constructor Create (a, b: TColor; p, s: real); end; Implementation begin function Tpen.isReady: boolean; begin result := ready; end; procedure Tpen.switchOn begin ready:=paintSupply > 0; end; … end.

Слайд 5

Program prg_1; uses Pen_unit; var a: Tpen; begin a:=Tpen.Create(cOrange, cBlack; 2.5, 125.7); a.Write(‘Hello, World!’); a.switchOff; a.Free; звільнити динамічну пам’ять end. В об’єктній моделі ObjectPascal усі екземпляри класів динамічні. Змінна об’єктного типу – це неявний вказівник або посилання на динамічну пам’ять, де можна розташувати екземпляр класу.

Слайд 6

Екземпляр створюють за допомогою конструктора і знищують за допомогою деструктора. Кожен екземпляр класу має окрему пам’ять і власний набір полів. Усі екземпляри класу поділяють єдиний набір методів, оголошених у класі. constructor Tpen.Create(a, b: Tcolor; p, s: real); begin colour:=a; paintColor:=b; if p>=1.0 then price:=p else price:=1.0; if s>=100.0 then paintSupply:=s else paintSupply:=100.0; ready:=false; end;

Слайд 7

Інкапсуляція - обмеження доступу до даних Це дозвіл доступатися до спільних даних обмеженій кількості методів, доступ для всіх організовується за посередництва відповідальних за це методів. Unit shape_1; Interface Type Trect = class(TObject) private a, b: real; public constructor Create(x, y: real); destructor Destroy; function square: real; function Perym: real;

Слайд 8

Procedure WriteOut; Implementation begin constructor Trect.Create(x, y: real); begin a:=x; b:=y; end; destructor Trect.Destroy; begin writeln(‘Said “Bye”’); end; procedure Trect.writeOut; begin writeln(a, b, ‘Rectangle’); end; function Trect.Sguare: real; begin result:=a*b; end; function TRect.Perym: real; begin result:=2*(a+b); end;

Слайд 9

constructor TRect.Create; begin a:=3; b:=4; end; end. Конструктор задає значення полів об’єкта, вони можуть бути (початкові значення) в тексті конструктора або передані через параметри. Імена параметрів повинні відрізнятися від імен полів. Деструктор – це метод, відповідальний за коректне звільнення пам’яті від екземпляру класу.

Слайд 10

Program p_1; uses Shape_1; var s:array [1…100] of TRect; i:integer; m:real; begin … m:=s[1].Square; for i:=2 to 100 do if s[i].Square>m then m:=s[i].Square … end. Якщо частина коду написана двічі, виносимо її в окремий метод.

Слайд 11

TrectB: Trect + getB, setB unit shape_2 interface uses shape_1 type TRectB = class(TRect); Клас отримує (успадковує) від поперднього класу всі поля і наслідує їх функціональність. public function getB:real; procedure setB(y; real); procedure writeOut(t:textfile); end; implementation function TRectB.getB:real; begin result:=b; end;

Слайд 12

procedure TRuctB.setB(y:real); begin b:=y; calls; end; procedure writeOut(t:textfile); begin writeln(t, ‘Advanced Rect’, a, ‘x’, b); end; private діє разом з поділом на unit. Доступ ззовні модуля заборонено всім без винятку, всередині модуля дозволено підкласам. Для того, щоб підкласи базового класу мали доступ до окремих полів даних, їх розташовують в області доступу protected.

Слайд 13

Program p2; uses shape_1; shape_2; var p:Trect; q:TRectB; begin p.TRect.Create; q:=Trect. Create(7, 12); q.setB(0.5) if p.square

Слайд 14

Метод WriteOut у класі TRect оголошено звичайним чином як статичний метод такий, як square, perym,…тому в коді деструктора виклик WriteOut прив’язується на етапі компіляції до методу TRect.WriteOut, це називають раннім зв’язуванням. Для того, щоб деструктор викликав метод WriteOut потрібного класу, його оголошують віртуальним. Виклики віртуальних методів виконують за допомогою пізнього зв'язування, що відбувається на етапі виконання програми. Клас Tobject є базовим. Усі інші класи є його нащадками. Free – метод, який звільняє динамічну пам'ять. Destroy – деструктор.

Слайд 15

Підклас успадковує від базового класу усі без винятку поля класу і наслідує його поведінку, це означає, що екземпляри підкласу здатні опрацьовувати такі ж повідомлення, як і екземпляри базового. Підкласові доступні усі public і protected методи базового класу, тому екземпляри підкласу можуть без перешкод і без змін використовувати методи базового класу. Дуже часто підклас змінює поведінку базового (перевизначає окремі методи) і/або доповнює (додає нові методи). Взаємозвязки між базовим і похідними класами

Слайд 16

Для перевизначення методів є дві можливості: для звичайних (статичних) методів дозволено використовувати довільну сигнатуру, тобто, метод з тим самим іменем у підкласі може мати інший набір параметрів; Віртуадбні методи перевизначають завжди з ттою самою сигнатурою. var c, a, b: Trect; begin a:=TRect.Create(3, 4); b:=TRect.Create(4, 3); if a.Square > b.Square then c:=a else c:-b c.WriteOut(output); … end. копіювання вказівника

Слайд 17

Отримання копії об'єкта Щоб отримати копію об'єкта, необхідно створити додатковий конструктор, який прийматиме параметром об'єкт того ж класу: d:=TRect.CopyCreate(a)

Слайд 18

Раннє і пізнє зв'язування Приклад: купівля кілограму апельсинів. Ми заздалегідь знаємо, що нам потрібно купити 1 кг апельсинів. Тому ми беремо невеликий пакет, небагато, але достатньо грошей, щоб вистачило на цей кілограм. Виходячи з будинку, ми не знаємо чого і скільки нам потрібно купити. Тому ми беремо машину(а раптом буде багато всього і важко нести?), запасаємося пакетами великих і малих розмірів і беремо якомога більше грошей. Їдемо на ринок і з'ясовується, що потрібно купити тільки 1 кг апельсинів.

Слайд 19

При застосуванні раннього зв'язування, ми ніби говоримо компілятору: "Я точно знаю, чого я хочу. Тому жорстко(статично) зв'язуй усі виклики функцій". При застосуванні механізму пізнього зв'язування ми говоримо компілятору: "Я доки не знаю, чого я хочу. Коли прийде час, я повідомлю, що і як я хочу". Висновки: Таким чином, під час раннього зв'язування методи зв'язуються при першій слушній нагоді. У пізньому зв'язуванні реалізований спеціальний механізм, який визначає, як відбуватиметься зв'язування, що викликається і викликає методи, коли виклик буде зроблений фактично. Очевидно, що швидкість і ефективність при ранньому зв'язуванні вищі, ніж при використанні пізнього зв'язування. У той же час, пізнє зв'язування забезпечує деяку універсальність зв'язування.

Слайд 20

Адресу динамічного методу міститиме таблиця того класу, де він визначений TSquare = class(TRect) constructor Create(x: real); procedure WriteOut(var t:textfile); end; //public можна упустити. constructor TSquare.Create(x: real ); begin inherited Create(x, x); end; override

Слайд 21

Name() – overload Name(x) – override Tshape TRect TCircle TRectB TSquare a, s P-4a S=a2 TRect b P=2(a+b) S=ab TRectB

Слайд 22

Tshape = clas(TObject) private s:real; protected procedure Calc S; virtual; abstract; public function Perym: real; virtual; abstract; function Square: real; procedure WriteOut(var T: textfile); virtual; absract; destructor Destroy; override; end; function TShape Square: real; begin result:=s; end;

Слайд 23

Tshape 3d TPiramide TConus TCylindr TParalelepiped base: TShape Tshape 3d = class(TObject) private base: Tshape; h: real; end; Циліндр Конус Піраміда Паралелепіпед V=Sосн.h V = Sосн.h V= Sосн.h V=Sосн.h …

Слайд 24

Кожен клас повинен містити свій конструктор. TShape 3d base: TShape; h: real; base.Square; v; a side.Square; v; a surf.Square; v; a Volume; v; a WriteOut; v; a

Слайд 25

function TShape3d.base.square: real; begin result:=base.Square(); end; constructor TCylindr.Create(a, b: real); begin base:=TCircle.Create(a); h:=b; end; constructor TParalelepiped.Create(x, y, z: real); begin base:=TRect.Create(x, y); h:=z; end;

Слайд 26

function TDirectShape.volume: real; begin result:=base.square*h; end; Завдання: Задано виміри 12 різних об'ємних фігур, потрібно надрукувати інформацію про кожного з них, знайти фігуру з найбільшим об'ємом і з найменшою повною поверхнею.

Слайд 27

const n=12; type mas=array[1…n] of TShape3d var a: mas; k, i: integer; x, y, z: real; for i:=1 to n do A[i].writeOut; begin for i:=1 to n do begin read(k); case k of Cylindr: begin readln(x, y); A[i]:=Tcylindr.Create(x, y);

Слайд 28

Paralelepiped: begin readln(x, y, z); A[i]:= Tparalelepiped.Create(x, y, z); end; … end; … end. TRectAB = class; private a,b: real; public function getB(): real; procedure setB(x: real); function Square(): real; procedure WriteOut();

Слайд 29

constructor Create(x, y: real); end; … begin readln(size); R:=TRectAB.Create(size, 7); R.setA(R.getA + z); TRect_AB = class private Fa, Fb: real; // field protected function getA(): real; function getB(): real; procedure setA(x: real); procedure setB(x: real);

Слайд 30

public constructor Create(x; y: real); function Square(): real; property a: real: read getA write setA; property b: real: read getB write setB; end; Property описує інтерфейсний елемент, його використовують для неявного виклику методів. begin R:=TRect_AB.Create(size, 7); R.a:=R.a+2;

Слайд 31

Property – новий спосіб доступу. Ключові слова read і write вказують чи буде для властивості доступ для читання і для запису відповідно. Кожна з цих частин може бути відсутня

Завантажити презентацію

Презентації по предмету Інформатика