Основні концепції та принципи ООП

Матеріал з Вікі ЦДУ
Версія від 02:54, 20 травня 2010; Затворний Денис (обговореннявнесок)

(різн.) ← Попередня версія • Поточна версія (різн.) • Новіша версія → (різн.)
Перейти до: навігація, пошук

Контроль під час компіляції та під час виконання

Мови програмування можна оцінити по тому, наскільки вони строгі до типам. Контроль типів включає перевірку існування планування для, типів їх параметрів, перевірку кордонів масивів і подібне.

C + +, Java, Python, і Object Pascal віддають перевагу більш-менш ретельний контроль типів під час компіляції. С + +, можливо, найменш точний в цьому відношенні (на що вказує, наприклад, можливість присвоєння double до float), тоді як Java використовує перевірку типів найбільш широко. Це тому, що C++ забезпечує сумісність з Сі, який не дуже строго перевіряє типи під час компіляції. Наприклад, C і C++ вважають, що всі арифметичні типи сумісні (хоча привласнення float цілої змінної викличе попередження компілятора). У Object Pascal і Java логічне значення не є цілим, а символ - ще один відмінний і несумісний тип.

Той факт, що віртуальна машина Java інтерпретує байтовий код під час виконання, не означає, що ця мова відмовляється від перевірки типів під час компіляції. Навпаки, у цій мові перевірка найбільш ретельно. Інші OО мови, такі як Smalltalk і CLOS, навпаки, схильні більшість перевірок типів (якщо не всі) здійснювати під час виконання.

=

Чисто об'єктно-орієнтовані та гібридні мови===

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

Серед трьох наших мов, тільки Java і C # є чистими OО мовами (як Eiffel і Smalltalk). На перший погляд це здається позитивною ідеєю. Проте вона веде до того, що ви використовуєте купу статичних методів і статичних даних, що не так вже відрізняється від використання глобальних функцій і даних, за винятком більш складного синтаксису. На мою думку, чисті OО мови дають перевагу новачкам в ООП, тому що програміст змушений використовувати (і вчити) модель ООП. C++ і Object Pascal, навпаки, - типові приклади гібридних мов, які дозволяють програмістам використовувати при необхідності традиційний підхід C або Pascal.

Smalltalk розширює цю ідею до рівня «обоб'екєктування» таких визначених типів даних, як цілі і символи, а також мовних конструкцій (таких як цикли). Це теоретично цікаво, але сильно зменшує ефективність. Java зупиняється багато раніше, допускаючи присутність простіші не ОО типів даних (хоча є необов'язкові класи-обгортки і для простих типів).

Проста об'єктна модель і посилальної-об'єктна модель

Властивість: Третій елемент, по якому розрізняються мови ООП - їх об'єктна модель. Деякі традиційні мови ООП дозволяють програмістам створювати об'єкти в стеку, в купі (у хіпі - heap) або в статичній пам'яті. У цих мовах змінна типу клас відповідає об'єкту в пам'яті. Так працює C++.

Останнім часом з'явилася тенденція використовувати іншу модель, часто звану посилально-об'єктною моделлю. У цій моделі кожен об'єкт динамічно розміщується в купі, а змінна типу клас фактично є посиланням або Хендл об'єкта в пам'яті (технічно це щось на кшталт покажчика). Java і Object Pascal обидва використовують цю посилальну модель. Як ми побачимо, коротко це означає, що вам необхідно не забути виділити пам'ять для об'єкта.