Реферати українською » Информатика, программирование » Объектно-ориентированное програмування


Реферат Объектно-ориентированное програмування

Страница 1 из 2 | Следующая страница

1.     Запровадження

 

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

Объектно-ориентированный мову програмування повинен мати такими властивостями:

1.   абстракції – формальне про якостях чи властивості предмета шляхом уявної видалення деяких подробиць чи матеріальних об'єктів;

2.   инкапсуляции – механізму, який зв'язує умісти код і такі, яким він маніпулює, і що захищає їхнього капіталу від зовнішніх перешкод і некоректного використання;

3.   наслідування – процесу, з допомогою якого об'єкта набуває властивості іншого, тобто. підтримується ієрархічної класифікації;

4.   поліморфізму – властивості, що дозволяє використовувати і той ж інтерфейс у загальне класу дій.

Розробка объектно-ориентированных програм складається з таких послідовних робіт:

- визначення основних об'єктів, необхідні вирішення даної задачі;

- визначення закритих даних (даних стану) для вибраних об'єктів;

- визначення другорядних об'єктів та його закритих даних;

- визначення ієрархічної системи класів, які мають обрані об'єкти;

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

- розробка послідовності висловів, що дозволяють вирішити це завдання;

- розробляються методи, обробних кожне повідомлення;

- очищення проекту, тобто усунення всіх допоміжних проміжних матеріалів, які використовувалися під час проектування;

- кодування, налагодження, компонування і тестування.

Объектно-ориентированное програмування дозволяє програмісту моделювати об'єкти певній предметної області шляхом програмування її змісту та поведінки не більше класу. Конструкція «клас» забезпечує механізм инкапсуляции для реалізації абстрактних типів даних. Инкапсуляция хіба що приховує і подробиці внутрішньої реалізації типів, і його зовнішні операції, і функції, допустимі до виконання над об'єктами цього.


2. Що таке объектно-ориентированное програмування

 

            Елементи объектно-ориентированного програмування (ОВП) з'явилися торік у початку 1970-х років у мові моделювання Симула, потім набули свій розвиток, й у час ОВП належить до провідних технологій програмування.

         Основна мета ОВП, як і більшості інших підходів до програмування – підвищення ефективності розробки програм. Ідеї ОВП виявилися плідними і в цьому застосування у мовами програмування, а й у інших галузях Computer Science, наприклад, у сфері розробки операційними системами.

          Поява ОВП було з тим наглядом, що комп'ютерні програми є опис дій, виконуваних над різними об'єктами. У ролі останніх можуть виступати, наприклад, графічні об'єкти, запис у базах даних чи сукупності числових значень. У традиційних методах програмування зміна даних чи правив і методів обробки часто зумовлювало необхідності значного зміни програми. Будь-яке істотне зміни програми – це велика неприємність для програміста, бо за цьому зростає ймовірність помилок, унаслідок чого зростає час, необхідне «доводки» програми. Використання ОВП дозволяє із ситуації з мінімальними втратами, зводячи необхідну модифікацію програми до її розширенню і доповнення. Слід зазначити, що ОВП перестав бути панацеєю від усіх програмістських бід, та його цінність як передовий технології програмування незаперечна. Вивчення ідей методів ОВП може істотно спростити розробку й налагодження складних програм.

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

 

3. Об'єкти

 

         Базовим в объектно-ориентированном програмуванні є поняття об'єкта. Об'єкт має певні властивості. Стан об'єкта ставиться значеннями його ознак. Об'єкт «знає», як вирішувати певні завдання, тобто має методами рішення. Програма, написана з допомогою ОВП, складається з об'єктів, які можуть опинитися взаємодіяти між собою.

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

         На відміну від типу «запис», об'єктний тип містить як поля, описують дані, але й процедури і функції, описи яких міститься у описі об'єкта. Ці процедури і функції називають методами. Методам об'єкта доступні його поля. Слід зазначити, що методи лікування й їх параметри визначаються описі об'єкта, які реалізація дається поза цього описи, у цьому місць програми, яке передує виклику цього методу. У описі об'єкта фактично утримуватися лише шаблони звернення до методів, необхідних компілятору для перевірки відповідності кількості параметрів та його типів при зверненні до методів. Ось приклад описи объекта[1]:

Type

    Location = object

             X,Y: Integer;

             Procedure Init(InitX, InitY: Integer);

             Function GetX: Integer;

             Function GetY: Integer;

End;

Тут описується об'єкт, котрі можуть використовуватися надалі, скажімо, в графічному режимі призначеним визначення становища на екрані довільного графічного елемента. Об'єкт описується з допомогою зарезервованих слів

object…end, між якими перебувати опис полів і методів. У прикладі об'єкт містить два поля для зберігання значень графічних координат, а як і для описи процедури і двох функцій - це методи даного об'єкта. Процедура варта завдання початкового становища об'єкта, а функція – для зчитування його координат.

4. Инкапсуляция

 

         Инкапсуляция є найважливішим властивістю об'єктів, у якому будується объектно-ориентированное програмування. Инкапсуляция у тому, що об'єкт приховує у собі деталі, які несуттєві від використання об'єкта. У традиційному підході до програмування з допомогою глобальних змінних програміст ні застрахований від власних помилок, що з використанням процедур, не виділені на обробки даних, пов'язаних із цими перемінними. Припустимо, наприклад, що є «не-ООП» програма, призначена для нарахування заробітної плати працівникам певної організації, а програмі є масиву. Один масив зберігає величину зарплати, а інший – телефонні номери співробітників (упорядкування звіту для податкової інспекції). Що відбудеться, якщо програміст випадково переплутає ці масиви? Вочевидь, для бухгалтерії почнуться важкі часи. «Жёсткое» связание даних, і процедур їх опрацювання щодо одного об'єкті дасть можливість уникнути неприємностей що така. Инкапсуляция і є способом організації доступу до даних лише крізь відповідні методи.

         У прикладі опис об'єкта процедура ініціалізації Init і функції GetX і GetY не існують як окремі самостійні об'єкти. Це невід'ємні частини об'єктного типу Location. Якщо програмі є опис кількох змінних зазначеного типу, то тут для кожної перемінної резервується свою власну область пам'яті для зберігання даних, а покажчики на точки входу в процедуру і функції – загальні. Виклик кожного з методів можлива лише з допомогою складеного імені, явно яке зазначає, в обробці яких даних призначений даний метод.


5. Наследование

 

         Наследование – це ще одне базове поняття объектно-ориентированного програмування. Наследование дозволяє визначати нові об'єкти, використовуючи властивості колишніх, доповнюючи чи змінюючи їх. Объект-наследник одержує всі поля і нові методи «батька», до яких він може додати свої власні поля та художні засоби чи замінити («перекрити») їх своїми методами. Приклад описи объекта-наследника дається нижче:

Tipe

      Point = object(Location)

                Visible: Boolean;

                Procedure Int(IntX, IntY: Integer);

                            Procedure Show;

                            Procedure Hide;

                            Function IsVisible: Boolean;

                            Procedure MoveTo(NewX, NewY: Integer);

                   End;

Спадкоємцем тут є об'єкт Point, описує графічну точку, а батьком – об'єкт Location. Спадкоємець зовсім позбавлений опис полів і методів батька. Ім'я останнього вказується в круглі дужки після слова object. З методів спадкоємця можна викликати методи батька. До сформування спадкоємця непотрібен мати вихідний текст об'єкта батька. Объект-родитель може бути у складі оттранслированного модуля.

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

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

6. Віртуальні методи

 

         Наследование дозволяє створювати ієрархічні, пов'язані відносинами підпорядкування, структури даних. Слід, проте, помітити, що час використання такої можливості виникатимуть проблеми. Припустимо, що в графічної програмі необхідно визначити об'єкт Circle, що є нащадком іншого об'єкта Point:

         Type

                   Circle = object (point)

                            Radius: Integer;

                            Procedure Show;

                            Procedure Hide;

                            Procedure Expand(ExpandBy: Integer);

                            Procedure Contact(ContactBy: Integer);

                   End;

Новий об'єкт Circle відповідає окружності. Оскільки властивості окружності від властивостей точки, в объекте-наследнике доведеться змінювати процедури Show і Hide, які відбивають окружність і видаляють її зображення з екрана. Може бути, що метод Init (див. попередній приклад) об'єкта Circle, успадкований від об'єкта Point, також використовує методи Show і Hide, надалі під час трансляції об'єкта Point використовує посилання старі методи. Вочевидь в об'єкті Circle вони працювати ні. Можна, звісно, спробувати «перекрити» метод Init. Щоб це, нам доведеться повністю відтворити текст методу. Це усложни роботу, та й можливо, оскільки вихідного тексту програми може б під руками (якщо объект-родитель вже перебувати у оттранслированном модулі).

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

Щоб використовувати віртуальний метод, необхідна за описі об'єкта після заголовка методу додати ключовим словом virtual. Заголовки віртуальних методів батька і спадкоємця мають у точності збігатися. Инициализация примірника об'єкта, має віртуальні методи, повинна виконуватися з допомогою спеціального методу – конструктора. Конструктор зазвичай привласнює полях об'єкта початкові значення й виконує інші дії з ініціалізації об'єкта. У заголовку метода-конструктора слово procedure замінюється словом constructor. Дії зворотні діям конструктора, виконує ще одне спеціальний метод – деструктор. Він описується словом destructor.

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

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

Зауважимо, що конструктор чи деструктор, може бути «порожніми», тобто не утримувати операторів. Весь необхідний код у разі створюється при трансляції ключових слів construct і destruct.


7. Динамічний створення об'єктів

 

         Змінні об'єктного типу може бути динамічними, тобто будуть показані у пам'яті лише під час їхньої використання. Робота з динамічними об'єктами використовуються розширений синтаксис процедур New і Dispose. Обидві процедури у разі перебувають у ролі другого параметра виклик конструктора чи деструктора виділення чи звільнення пам'яті перемінної об'єктного типу:

         New(P, Construct)

чи

         Dispose(P, Destruct)

Де P – покажчик на зміну об'єктного типу, а Construct чи Destruct – конструктор і деструктор цього.

         Дія процедури New у разі розширеного синтаксису рівносильне дії наступній пари операторів:

New(P);

         P^.Construct;

Эквивалентом Dispose є що:

         P^Dispose;

         Dispose(P)

         Застосування розширеного синтаксису як покращує читаність вихідного коду, а й генерує коротший і досить ефективний виконуваний код.

8. Полиморфизм

 

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

         Наступне питання, пов'язані з використанням об'єктів, залежить від сумісності об'єктних типів. Корисно знати таке. Спадкоємець зберігає властивості сумісності коїться з іншими об'єктами свого батька. У правій частині оператора присвоювання замість типів батька можна використовувати типи спадкоємця, але з навпаки. Отже, у нашій прикладі припустимі присвоювання:

Var

     Alocation : Location;

     Apoin : Point;

     Acircle : Circle;

Alocation :=Apoint

Apoint := Acrcle;

Alocation := Acircle;

         Річ у тім, що спадкоємець може бути більш складним об'єктом, що містить поля і нові методи, тому присваиваемые значення примірника объекта-родителя примірнику объекта-наследника може залишити деякі поля невизначеними і, отже, представляє потенційну небезпеку. За виконання

Страница 1 из 2 | Следующая страница

Схожі реферати:

Навігація