logo

ООП | Об'єктно-орієнтований дизайн

Об'єктно-орієнтоване проектування почалося з моменту винаходу комп’ютерів. Було програмування, і підходи до програмування з’явилися. Програмування — це, по суті, надання певних інструкцій комп’ютеру.
На початку комп’ютерної ери програмування зазвичай обмежувалося програмуванням машинною мовою. Машинна мова означає ті набори інструкцій, які є специфічними для конкретної машини чи процесора, які мають форму 0 та 1. Це послідовності бітів (0100110…). Але написати програму або розробити програмне забезпечення машинною мовою досить складно.
Насправді неможливо розробити програмне забезпечення, яке використовується в сучасних сценаріях, із послідовностями бітів. Це була основна причина, чому програмісти перейшли до наступного покоління мов програмування, розробляючи мови асемблера, які були достатньо близькі до англійської мови, щоб їх було легко зрозуміти. Ці мови асемблера використовувалися в мікропроцесорах. З винаходом мікропроцесора мови асемблера процвітали і панували в галузі, але цього було недостатньо. Знову програмісти придумали щось нове, тобто структуроване та процедурне програмування.



Структуроване програмування –
Основним принципом підходу до структурованого програмування є поділ програми на функції та модулі. Використання модулів і функцій робить програму більш зрозумілою і читабельною. Це допомагає писати чистіший код і підтримувати контроль над функціями та модулями. Цей підхід надає важливість функціям, а не даним. Він зосереджений на розробці великих програмних додатків, наприклад, C використовувався для розробки сучасних операційних систем. Мови програмування: PASCAL (введена Ніклаусом Віртом) і C (введена Деннісом Річі) дотримуються цього підходу.
Підхід процедурного програмування –
Цей підхід також відомий як підхід зверху вниз. У цьому підході програма розділена на функції, які виконують конкретні завдання. Цей підхід в основному використовується для програм середнього розміру. Дані глобальні, і всі функції мають доступ до глобальних даних. Основний недолік процедурного підходу до програмування полягає в тому, що дані не захищені, оскільки дані є глобальними і до них може отримати доступ будь-яка функція. Потік керування програмою досягається за допомогою викликів функцій і операторів goto. Мови програмування: FORTRAN (розроблена IBM) і COBOL (розроблена доктором Грейс Мюррей Хоппер) дотримуються цього підходу.
Ці конструкції програмування були розроблені наприкінці 1970-х і 1980-х років. Існували деякі проблеми з цими мовами, хоча вони відповідали критеріям добре структурованих програм, програмного забезпечення тощо. Вони не були такими структурованими, як вимоги того часу. Вони здаються надмірно узагальненими та не співвідносяться з програмами реального часу.
Для вирішення подібних проблем ООП був розроблений як рішення об’єктно-орієнтований підхід.

Підхід до об’єктно-орієнтованого програмування (ООП) –
Концепція ООП була в основному розроблена для подолання недоліків вищезазначених методологій програмування, які не були настільки близькі до реальних програм. Попит був підвищений, але все одно використовувалися традиційні методи. Цей новий підхід приніс революцію в галузі методології програмування.
Об'єктно-орієнтоване програмування (ООП) - це не що інше, як те, що дозволяє писати програми за допомогою певних класів і об'єктів реального часу. Можна сказати, що цей підхід дуже близький до реального світу та його застосувань, оскільки стан і поведінка цих класів і об’єктів майже такі ж, як і об’єктів реального світу.
Давайте заглибимося в загальні поняття ООП, які наведені нижче:
Що таке клас і об'єкт?
Це основна концепція ООП; розширена концепція структури, яка використовується в C. Це абстрактний і визначений користувачем тип даних. Він складається з кількох змінних і функцій. Основне призначення класу – зберігати дані та інформацію. Члени класу визначають поведінку класу. Клас — це план об’єкта, але ми також можемо сказати, що реалізація класу — це об’єкт. Клас невидимий для світу, але об'єкт є.



CPP






Class car> {> >int> car_id;> >char> colour[4];> >float> engine_no;> >double> distance;> > >void> distance_travelled();> >float> petrol_used();> >char> music_player();> >void> display();> }>

>

>

Тут клас car має властивості car_id, color, engine_no та distance. Він нагадує реальний автомобіль із тими самими специфікаціями, який можна оголосити загальнодоступним (видимим для всіх поза класом), захищеним і приватним (невидимим для всіх). Крім того, існують такі методи, як distance_travelled(), petrol_used(), music_player() і display(). У наведеному нижче коді автомобіль є класом, а c1 – об’єктом автомобіля.

повний суматор

CPP




#include> using> namespace> std;> > class> car {> public>:> >int> car_id;> >double> distance;> > >void> distance_travelled();> > >void> display(>int> a,>int> b)> >{> >cout <<>'car id is= '> << a <<>' distance travelled = '> << b + 5;> >}> };> > int> main()> {> >car c1;>// Declare c1 of type car> >c1.car_id = 321;> >c1.distance = 12;> >c1.display(321, 12);> > >return> 0;> }>

>

>

Абстракція даних –
Абстракція відноситься до акту представлення важливих і особливих функцій без включення фонових деталей або пояснень щодо цієї функції. Абстракція даних спрощує проектування бази даних.

    Фізичний рівень:
    Він описує, як зберігаються записи, які часто приховані від користувача. Його можна описати фразою блок зберігання.
    Логічний рівень:
    Він описує дані, що зберігаються в базі даних, і зв’язки між даними. Програмісти зазвичай працюють на цьому рівні, оскільки вони знають про функції, необхідні для підтримки зв’язків між даними.
    Рівень перегляду:
    Прикладні програми приховують деталі типів даних та інформацію з міркувань безпеки. Цей рівень, як правило, реалізується за допомогою графічного інтерфейсу користувача, і відображаються деталі, які призначені для користувача.

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

Java




import> java.io.*;> > class> GFG {> >public> static> void> main(String[] args)> >{> >System.out.println(>'GfG!'>);> > >Dog dog =>new> Dog();> >dog.name =>'Bull dog'>;> >dog.color =>'Brown'>;> >dog.bark();> >dog.run();> > >Cat cat =>new> Cat();> >cat.name =>'Rag doll'>;> >cat.pattern =>'White and slight brownish'>;> >cat.meow();> >cat.run();> > >Animal animal =>new> Animal();> > >animal.name =>'My favourite pets'>;> > >animal.run();> >}> }> > class> Animal {> >String name;> >public> void> run()> >{> > >System.out.println(>'Animal is running!'>);> >}> }> > class> Dog>extends> Animal {> > /// the class dog is the child and animal is the parent> > >String color;> >public> void> bark()> >{> >System.out.println(name +>' Wooh ! Wooh !'> >+>'I am of colour '> + color);> >}> }> > class> Cat>extends> Animal {> > >String pattern;> > >public> void> meow()> >{> >System.out.println(name +>' Meow ! Meow !'> >+>'I am of colour '> + pattern);> >}> }>

>

>

C++




цикл while java

#include> #include> using> namespace> std;> > class> Animal {> public>:> >string name;> >void> run(){> >cout<<>'Animal is running!'>< } }; class Dog : public Animal { /// the class dog is the child and animal is the parent public: string color; void bark(){ cout<' Wooh ! Wooh !' <<'I am of colour '< } }; class Cat : public Animal { public: string pattern; void meow(){ cout<' Meow ! Meow !'<<'I am of colour '< } }; int main(){ cout<<'GFG'< Dog dog; dog.name = 'Bull dog'; dog.color = 'Brown'; dog.bark(); dog.run(); Cat cat; cat.name = 'Rag doll'; cat.pattern = 'White and slight brownish'; cat.meow(); cat.run(); Animal animal; animal.name = 'My favourite pets'; animal.run(); return 0; //code contributed by Sanket Gode. }>

>

>

Вихід

GfG! Bull dog Wooh ! Wooh !I am of colour Brown Animal is running! Rag doll Meow ! Meow !I am of colour White and slight brownish Animal is running! Animal is running!>

Поліморфізм –
Поліморфізм — це здатність даних оброблятися в більш ніж одній формі. Це дозволяє виконувати одне і те ж завдання різними способами. Він складається з перевантаження методу та перевизначення методу, тобто написання методу один раз і виконання кількох завдань з використанням того самого імені методу.

CPP




#include> using> namespace> std;> > void> output(>float>);> void> output(>int>);> void> output(>int>,>float>);> > int> main()> {> >cout <<>' GfG! '>;> >int> a = 23;> >float> b = 2.3;> > >output(a);> >output(b);> >output(a, b);> > >return> 0;> }> > void> output(>int> var)> {>// same function name but different task> >cout <<>'Integer number: '> << var << endl;> }> > void> output(>float> var)> {>// same function name but different task> >cout <<>'Float number: '> << var << endl;> }> > void> output(>int> var1,>float> var2)> {>// same function name but different task> >cout <<>'Integer number: '> << var1;> >cout <<>' and float number:'> << var2;> }>

>

>

Деякі важливі моменти, які слід знати про ООП:

  1. ООП розглядає дані як критичний елемент.
  2. Акцент робиться на даних, а не на процедурі.
  3. Розкладання задачі на простіші модулі.
  4. Не допускає вільного проходження даних у всій системі, тобто локалізованого потоку керування.
  5. Дані захищені від зовнішніх функцій.

Переваги ООП –

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

Недоліки ООП –

  • З ООП класи іноді мають тенденцію бути надмірно узагальненими.
  • Стосунки між класами часом стають поверхневими.
  • Дизайн ООП складний і вимагає відповідних знань. Крім того, потрібно правильно спланувати та розробити ООП-програмування.
  • Щоб програмувати за допомогою ООП, програмісту потрібні відповідні навички, такі як дизайн, програмування та мислення в термінах об’єктів і класів тощо.