Professional Documents
Culture Documents
Тема 1 ООП Парадигми програмування та ООП
Тема 1 ООП Парадигми програмування та ООП
Речення:
Обидві функції не відрізняються одна від одної з точністю до позначень для структур керування.
Несуттєві відмінності полягають у способі запису заголовка, визначеннях та ініціалізації змінних,
позначеннях для розгалуження і циклу (зокрема є відмінність семантики циклу з умовою
закінчення), позначеннях операторних дужок і способі повернення результату.
С++ також підтримує традиційні для модульного програмування механізми
абстракції даних, доповнені можливостями об’єктно-орієнтованої парадигми.
Ось якого вигляду на С++ набуде клас місяців року, відповідний до
прикладу з лістингів мовою Модула–2:
// Клас С++ для обчислення кількості днів у місяці { Визначення модуля обчислення кількості днів у місяці
мовою Модула-2 }
// Специфікація класу DEFINITION MODULE Months;
class Month{ TYPE Month = (jan, feb, mch, apr, may, jun, jul, aug,
public: sep, oct, nov, dec);
enum month PROCEDURE length(m: Month): Cardinal;
{ jan = 1, feb, mch, apr, may, jun, jul, END Months;
{ Реалізація модуля }
aug, sep, oct, nov, dec }; IMPLEMENTATION MODULE Months;
int length(); VAR
Month(month n): _mon(n) {} len: ARRAY Month OF Cardinal;
private: PROCEDURE length(m: Month): Cardinal;
month _mon; BEGIN
RETURN len[m];
static int _len[12]; END length;
}; { Ініціалізація модуля }
// Реалізація класу BEGIN
int Month::length() {
len[jan]:=31; len[feb]:=28;
return len[mon - 1];
len[mch]:=31;
}
int len[apr]:=30; len[may]:=31; len[jun]:=30;
Month::len[12]{31,28,31,30,31,30,31,31,30,31,30,31 len[jul]:=31; len[aug]:=31;
}; len[sep]:=30;
len[oct]:=31; len[nov]:=30;
len[dec]:=31;
END Months.
Відповідність текстів обома мовами у цьому випадку стала не
такою очевидною, як для процедурного варіанту. Більше того,
відмінність модульного і об’єктного підходів стає помітною
вже на цьому простому прикладі.
На відміну від модуля, клас Month – це повноцінний тип даних,
який можна використовувати, нарівні зі стандартними, для
визначення змінних, наприклад:
інкапсуляцією ,
поліморфізмом,
спадкуванням.
Інкапсуляція - це властивість системи, що дозволяє
об'єднати дані і методи, що працюють з ними, в класі і
приховати деталі реалізації від користувача. Інкапсуляція
нерозривно пов'язана з поняттям інтерфейсу класу. По
суті, все те, що не входить в інтерфейс, інкапсулюється в
класі.
Поліморфізм, що грецькою означає "багато форм", - це
властивість, що дозволяє одному інтерфейсу
отримувати доступ до спільного класу дій.
Простим прикладом поліморфізму може служити кермо
автомашини, яке виконує одні й ті ж функції своєрідного
інтерфейсу незалежно від виду застосовуваного механізму
управління автомашиною. Це означає, що кермо діє однаково
незалежно від виду рульового управління: прямої дії, з
посиленням або рейковою передачею. Отже, при обертанні
керма вліво автомашина завжди повертає вліво, який би вид
управління в ній не застосовувався. Головна перевага
однакового інтерфейсу полягає в тому, що, знаючи, як
поводитися з кермом, ви зумієте водити автомашину будь-
якого типу.
Той же самий принцип може бути застосований і в
програмуванні.
У загальному сенсі поняття поліморфізму нерідко виражається
таким чином: "один інтерфейс - багато методів ". Це означає,
що для групи взаємопов'язаних дій можна розробити
загальний інтерфейс. Поліморфізм допомагає спростити
програму, дозволяючи використовувати один і той
же інтерфейс для опису загального класу дій. Вибрати
конкретну дію (тобто метод) в кожному окремому випадку -
це задача компілятора. Програмісту не потрібно робити це
самому. Йому достатньо запам'ятати і правильно
використовувати загальний інтерфейс.
Спадкування являє собою процес, в ході якого один об'єкт
набуває властивостей іншого об'єкта. Це дуже важливий
процес, оскільки він забезпечує принцип ієрархічної
класифікації.