Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП_KAZYMYR.doc
Скачиваний:
14
Добавлен:
09.11.2019
Размер:
3.71 Mб
Скачать

3.4.2.Створення нових компонентів

Компоненти в Delphi реалізують ідею багаторазового використання на рівні коду. Компонент - це особливий різновид об'єктів(має двійкове подання й має специфічні властивості). Компоненти будуються на основі заздалегідь визначених класів.

При розробці нових компонентів варто дотримуватися такої схеми. Починаючи з нижніх рівнів ієрархії шукається вже існуючий клас, що найбільшою мірою забезпечує необхідну функціональність. Якщо методи даного класу занадто спеціалізовані для розглянутого випадку, то необхідно піднятися на одну сходинку нагору по ієрархії, поки не буде обраний клас, здатний забезпечити необхідну конкретизацію поводження. Обраний клас приймається в якості базового, від якого й буде створюватися новий похідний клас компонента.

Далі необхідно виконати:

  • побудова каркаса компонента;

  • настроювання компонента;

  • вбудовування компонента в палітру компонентів;

  • тестування компонента (створення застосування, що використовує розроблений компонент).

Нижче наводиться код каркаса нового компонента TCloseButton, створеного за допомогою середовища розробки Component Expert, що входить до складу Delphi.

unit NewComp;

interface

uses ...…

type

TCloseButton = class (Tbutton)

private

…………………………

protected

…………………………

public

…………………………

published

…………………………

end;

procedure Register;

implementation

procedure Register;

begin

RegisterComponent('Simple',[TCloseButton]); {}

end;

Процедура RegisterComponent містить як перший параметр ім'я сторінки палітри компонентів Simple, куди повинен бути поміщений новий компонент TСloseButton. Використання відкритого масиву означає, що в одному модулі можуть бути оголошені не один, а кілька компонентів.

Хороший стиль програмування вимагає, щоб новим компонентам приділялися нові директорії, куди буде записаний код і тестові програми. Не потрібно турбуватися, що це може привести до перевитрати ресурсів, тому що модуль компонента поміщається у файл, що виконується, тільки з тими елементами, на які є посилання в коді програми.

Зміна властивостей унаслідуваного компонента здійснюється через перевизначення конструкторів. Допустимо що необхідно щоб при створенні кнопки TCloseButton її ширина рівнялася 200 а довжина 300. Для цього в розділі public оголосимо конструктор у такий спосіб:

type

TCloseButton = class (Tbutton)

…………………

publick

constructor Create(AOwner : TComponent);override;

end;

implementation

constructor TCloseButton......reate(AOwner : Tcomponent);

begin

inherited Create(AOwner);

Width:=300;

Height:=200;

end;

3.5.Успадкування в Java

В термінології Java, як і в Smalltalk, клас, що успадкований, називається суперкласом (superclass), а похідний від нього клас – підкласом (subclass). Тому підклас - це версія суперкласу. Він успадковує всі змінні й методи, що існують в суперкласі, і додає свої елементи.

Особливості успадкування:

  1. Для оголошення успадкування використовується ключове слово extends:

class A {

int i; // public за замовчуванням

private int j; // private для А

}

// клас В(підклас) успадковує клас А (суперклас)

сlass B extends A {

int total;

void sum(){

total=i+j; // помилка, j тут не доступна

}

}

  1. На відміну від С++, в Java не підтримується множинне успадкування, тобто після слова extends може стояти ім'я тільки одного суперкласу. Але можна створити багаторівневу ієрархію. У цьому випадку підклас буде мати елементи всіх своїх суперкласів.

  2. При створенні екземпляра підкласу викликаються всі конструктори його суперкласів у порядку підпорядкованості класів, починаючи із самого верхнього суперкласу:

// суперклас А

class A {

A() {

System.out.println(“виклик конструктора класу А”)

}

}

// B - підклас А

class B extends A {

B() {

System.out.println(“виклик конструктора класу В”)

}

}

// С - підклас В

class З extends В {

З() {

System.out.println(“виклик конструктора класу З”)

}

}

class Х {

public static void main(String args[]) {

C c=new C();

}

}

Порядок виклику конструкторів для даної програми буде такий:

виклик конструктора класу А

виклик конструктора класу В

виклик конструктора класу З

  1. Тип змінної, а не тип об'єкта, на який вона посилається, визначає до яких елементів можна звертатися через неї. Тобто, коли змінна на об'єкт суперкласу вказує на об'єкт підкласу, то вона буде мати доступ тільки до елементів суперкласу, тому що , у принципі, вона нічого не знає про об'єкт підкласу:

class Box {

// розміри ящика

double width;

double heigth;

double depth;

Box(double len) {

width=height=depth=len;

}

}

сlass ColorBox extends Box {

// кольори ящика

int color;

ColorBox (double w, double h, double d, int c){

width=w;

height=h;

depth=d;

color=c;

}

}

class RefDemo {

public static void main(String args[]) {

Box lenbox = new Box(1); // lenbox посилання на Box

ColorBox paintbox = new ColorBox(1.0, 2.0, 3.0, 4);

lenbox= paintbox;

lenbox.color = 1; // помилка, lenbox не знає елемент color

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]