Смекни!
smekni.com

Об єктно-орієнтоване програмування (стр. 1 из 2)

Реферат з інформатики

Об’єктно-орієнтоване програмування


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

У цій главі розглядаються способи реалізації основних механізмів ООП у Object Pascal і Delphi:

- поняття об'єкта, класу і компонента;

- основні механізми ООП: інкапсуляція, спадкування і поліморфізм;

- особливості реалізації об'єктів;

- взаємодія властивостей і методів.

Матеріал глави розрахований на читача, що має представлення про саму мову Object Pascal, його операторах і основних можливостях.

Об'єкт і клас

Класом у Object Pascal називається структура мови, що може мати у своєму складі перемінні, функції і процедури. Перемінні в залежності від призначення іменуються чи полями властивостями (див. нижче). Процедури і функції класу — методами. Відповідний класу тип будемо називати об'єктним типом:

type

TMyObject = class (Tobject)

MyField: Integer;

function MyMethod: Integer;

end;

У цьому прикладі описаний клас TMyObject, що містить поле MyField і метод MyMethod.

Поля об'єкта аналогічні полям запису (record). Це дані, унікальні для кожного створеного в програмі екземпляра класу. Описаний тут клас TMyObject має одне поле — MyField.

Методи — це процедури і функції, описані усередині класу і призначені для операцій над його полями. До складу класу входить покажчик на спеціальну таблицю, де міститься вся інформація, потрібна для виклику методів. Від звичайних процедур і функцій методи відрізняються тим, що їм при виклику передається покажчик на той об'єкт, що їх викликав. Тому оброблятися будуть полючи саме того об'єкта, що викликав метод. Усередині методу покажчик на його об'єкт, що викликав, доступний під зарезервованим ім'ям Self.

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

Дозволено випереджальне оголошення класів, як у наступному прикладі:

Type

TFirstObject = class;

TSecondObject = class(TObject)

Fist : TFirstObject;

end;

TFirstObject = class(TObject)

...

end;

Щоб використовувати клас у програмі, потрібно, як мінімум, оголосити перемінну цього типу. Перемінна об'єктного типу називається екземпляром чи класу об'єктом.

var

AMyObject: TMyObject;

До введення терміна "клас" у мові Pascal існувала двозначність визначення "об'єкт", що міг позначати і тип, і перемінну цього типу. Тепер же існує чітка границя: клас — це опис, об'єкт — те, що створено відповідно до цього опису.

Як створюються і знищуються об'єкти?

Ті, хто раніш використовував ООП у роботі на C++ і особливо в Turbo Pascal, будьте уважні: у Object Pascal екземпляри об'єктів можуть бути тільки динамічними. Це означає, що в приведеному вище фрагменті перемінна AMyObject насправді є покажчиком, що містить адресу об'єкта.

Об'єкт "з'являється на світло" у результаті виклику спеціального методу, що инициализирует об'єкт — конструктора. Створений екземпляр знищується іншим методом — деструктором.

AMyObject := TMyObject.Create;

{ дії зі створеним об'єктом }

AMyObject...Destroy;

Але, скаже уважний читач, адже об'єкта ще ні, як ми можемо викликати його методи? Справедливе зауваження. Однак зверніть увагу, що викликається метод TMyObject.create, а не AMyObject.Create. Є такі методи (у тому числі конструктор), що успішно працюють до (чи навіть без) створення об'єкта. Про подібні методи, називаних методами класу, піде мова трохи нижче.

У Object Pascal конструкторів у класу може бути кілька. Загальноприйнято називати конструктор Create (на відміну від Turbo Pascal, де конструктор звичайно називався init, і від C++, де його ім'я збігається з ім'ям класу). Типова назва деструктора — Destroy.

type

TMyObject = class(TObject)

MyField: Integer;

Constructor Create;

Destructor Destroy;

Function MyMethod: Integer;

end;

Для знищення екземпляра об'єкта рекомендується використовувати метод Free, що спочатку перевіряє покажчик ( чине дорівнює він ыи) і тільки потім викликає Destroy:

AMyObject.Free;

До передачі керування тілу конструктора відбувається власне створення об'єкта — під нього приділяється пам'ять, значення всіх полів обнуляются. Далі виконується код конструктора, написаний програмістом для ініціалізації екземплярів даного класу. Таким чином, хоча на перший погляд синтаксис конструктора схожий з викликом процедури (не визначене значення, що повертається,), але насправді конструктор — це функція, що повертає створений і инициализированный об'єкт.

Щоб правильно инициализировать у створюваному об'єкті полючи, що відносяться до класу-предка, потрібно відразу ж при вході в конструктор викликати конструктор предка за допомогою зарезервованого слова inherited:

constructor TMyOb ject. Create;

begin

inherited Create;

end;

Що таке ядро

Ядро є серцем операційної системи і забезпечує виконання основних системних задач для роботи інших додатків.

Підготовка до побудови нового ядра

Для цього потрібні лише невеликі знання мови програмування С. небагато везіння і терпіння.

Навіщо взагалі може знадобитися установка нового ядра? Основних причин дві:

- бажання обновити його, щоб використовувати нове апаратне забезпечення;

- необхідність видалити з нього непотрібні модулі, щоб зменшити необхідну ядром пам'ять.

Починати в будь-якому випадку випливає з визначення того, яка версія ядра у вас установлена. Це робиться за допомогою команд

uname -іrelease

чи

uname -r

Ви одержите відповідь у формі

MajorVersionNumber.MinorVersionNumber.PatchLevel

Згідно GPL ядро може модифікувати кожної, хто здатний на це, однак офіційним "випускаючим" ядра є Линус Торвальдс.

Настроювання нового ядра

Для створення нового ядра спершу варто настроїти вихідні тексти, файли яких розташовуються в каталозі /usr/src/linux. Крім того, у вашій системі обов'язково повинний бути встановлений компілятор С. Якщо ви не встановлювали ні вихідних текстів, ні компілятора, самий час зробити це за допомогою команд

rpm -і kernel-source-2.2.5-15.і386.rpm

rpm -і egcs-2.91.66.і386.rpm

Тепер треба знайти нове ядро, що найпростіше зробити через Internet за адресою met-lab,unc.edu чи ftp, kernel.оrg.

Далі, у випадку накладення "латок" на виявлені діри, вам належить удатися до допомоги команди patch. Після цього можна приступати до настроювання і побудови ядра. У залежності від ваших смаків, можете скористатися командним рядком, текстовим чи меню, якщо ви установили X Windows, що відповідає Х-программой.

Настроювання з командного рядка

Переходимо в каталог /usr/.src/linux і запустите на виконання команду

# make config

По цій команді почнеться дійсний допит про те, яким саме ви хочете бачити створюване ядро.

Таблиця 1. Деякі параметри настроювання ядра

Параметр Опис
Code Maturity Level Призначений для використання експериментальних компонентів у ядрі
Processor type and features Визначає тип процесора
Loadable Module Support Необхідний при використанні модульного ядра замість єдиного
General Setup Серія загальних питань, наприклад про наявність чи співпроцесора підтримці РСI BIOS
Block Devices Серія питань про типи IDE-дисків і інших пристроїв уведення-висновку
Networking Option Питання про підтримку мережних можливостей, наприклад IP- маскирования чи брандмауерів
SCSI Support Підтримка SCSI -контролерів
SCSI Low-Level Support Низкоуровневая підтримка SCSI-контролерів
Network device support Підтримка різних мережних контролерів і процесів
Ethernet (10 or 100 Mbit) Підтримка мережних з'єднань 10 base і 100base
ISDN subsystem Підтримка integrated Sеrvices Digital Network (ISDN)
CD-ROM drivers {not for SCSI or IDE/АЇАРІ drivers) Підтримка різних типів нагромаджувачів CD-ROM
Character Devices Підтримка різних символьних пристроїв
Mice Підтримка різні вказівки
ftape Підтримка стрічкових нагромадите лею й інші типи знімних пристроїв
Filesystems Настроювання підтримки різних файлових систем, а також кодових сторінок DOS
Network Filesystems (NFS) Підтримка NFS
Sound Підтримка різних звукових карт
Additional low level sound drivers Підтримка низкоуровневых специфічних драйверів звукових карт
Kernel Hacking Підтримка профілювання ядра

Настроювання за допомогою меню

Більш приємний користувальницький інтерфейс у текстовому режимі забезпечує виклик наступної команди (з каталогу /usr/src/linux):

# make menuconfig

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

Настроювання ядра за допомогою Х-программы

Якщо ви установили Х Windows, то замість описаної в попередньому розділі команди можете скористатися командою

# make xconfig

Достоїнство цього меню наявність кнопки Help, щиглик на який приводить до появи діалогового вікна з поясненнями, що означає той чи інший параметр.

Закінчивши вносити зміни, клацніть на кнопці Save and Exit для їхнього збереження і виходу з програми.

Компіляція нового ядра

Тепер, коли настроювання виконане, можна приступати до компіляції ядра за допомогою команд

make dep

make zImage

Коли компіляція буде довершена, вам залишиться тільки настроїти систему на використання нового ядра при завантаженні. Нове ядро зберігається у файлі /usr/src/linux/arch/і386/boot/zImage, і його необхідно скопіювати в завантажувальний каталог /boot (але перед цим не забудьте зробити резервну копію наявного ядра, наприклад використовувавши команду mv /boot/vmlinuz /boot/vmlinuz.old). Копіюється знову створене ядро за допомогою команди