ООП | Объектно-ориентированный дизайн

Опубликовано: 10 Июля, 2021

Объектно-ориентированный дизайн начался с момента изобретения компьютеров. Присутствовало программирование, и подходы к программированию стали очевидными. Программирование в основном дает компьютеру определенные инструкции.

В начале компьютерной эры программирование обычно ограничивалось программированием на машинном языке. Машинный язык означает те наборы инструкций, которые относятся к конкретной машине или процессору и имеют форму нулей и единиц. Это последовательности битов (0100110…). Но написать программу или разработать программное обеспечение на машинном языке довольно сложно.

На самом деле невозможно разработать программное обеспечение, используемое в сегодняшних сценариях, с последовательностями битов. Это была основная причина, по которой программисты перешли к следующему поколению языков программирования, разработав языки ассемблера, которые были достаточно близки к английскому языку, чтобы их было легко понять. Эти языки ассемблера использовались в микропроцессорах. С изобретением микропроцессора языки ассемблера процветали и возглавили отрасль, но этого было недостаточно. И снова программисты придумали что-то новое - структурированное и процедурное программирование.

Структурированное программирование -
Основной принцип структурного программирования - разделение программы на функции и модули. Использование модулей и функций делает программу более понятной и читаемой. Это помогает писать более чистый код и сохранять контроль над функциями и модулями. Этот подход придает важность функциям, а не данным. Он ориентирован на разработку больших программных приложений, например, C использовался для разработки современных операционных систем. Языки программирования: PASCAL (представленный Никлаусом Виртом) и C (представленный Деннисом Ричи) следуют этому подходу.

Подход к процедурному программированию -
Этот подход также известен как подход сверху вниз. При таком подходе программа делится на функции, которые выполняют определенные задачи. Этот подход в основном используется для приложений среднего размера. Данные глобальны, и все функции могут обращаться к глобальным данным. Основной недостаток подхода процедурного программирования заключается в том, что данные не защищены, поскольку данные являются глобальными и могут быть доступны любой функции. Поток управления программой достигается с помощью вызовов функций и операторов goto. Языки программирования: FORTRAN (разработанный IBM) и COBOL (разработанный доктором Грейс Мюррей Хоппер) следуют этому подходу.

Эти программные конструкции были разработаны в конце 1970-х и 1980-х годах. С этими языками все еще оставались некоторые проблемы, хотя они соответствовали критериям хорошо структурированных программ, программного обеспечения и т. Д. Они не были так структурированы, как требования того времени. Они кажутся чрезмерно обобщенными и не соотносятся с приложениями реального времени.

Для решения такого рода проблем, ООП, был разработан объектно-ориентированный подход.

Подход объектно-ориентированного программирования (ООП) -
Концепция ООП была в основном разработана для преодоления недостатков вышеупомянутых методологий программирования, которые не были так близки к реальным приложениям. Спрос увеличивался, но все же применялись традиционные методы. Этот новый подход произвел революцию в области методологии программирования.

Объектно-ориентированное программирование (ООП) - это не что иное, как то, что позволяет писать программы с помощью определенных классов и объектов реального времени. Можно сказать, что этот подход очень близок к реальному миру и его приложениям, потому что состояние и поведение этих классов и объектов почти такие же, как и у объектов реального мира.

Давайте углубимся в общие концепции ООП, которые приведены ниже:

Что такое класс и объект?
Это основная концепция ООП; расширенная концепция структуры, используемая в C. Это абстрактный и определяемый пользователем тип данных. Он состоит из нескольких переменных и функций. Основная цель класса - хранить данные и информацию. Члены класса определяют поведение класса. Класс - это план объекта, но мы также можем сказать, что реализация класса - это объект. Класс не виден миру, но объект виден.




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 - объект автомобиля.




#include <iostream>
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;
}

Абстракция данных -
Абстракция относится к представлению важных и специальных функций без включения фоновых деталей или объяснения этой функции. Абстракция данных упрощает проектирование базы данных.

  1. Физический уровень:
    Он описывает, как хранятся записи, которые часто скрыты от пользователя. Его можно описать фразой «блок хранения».
  2. Логический уровень:
    Он описывает данные, хранящиеся в базе данных, и отношения между данными. Программисты обычно работают на этом уровне, поскольку они осведомлены о функциях, необходимых для поддержания отношений между данными.
  3. Уровень просмотра:
    Прикладные программы скрывают детали типов данных и информации в целях безопасности. Этот уровень обычно реализуется с помощью графического интерфейса пользователя, и отображаются сведения, предназначенные для пользователя.

Инкапсуляция -
Инкапсуляция - одна из фундаментальных концепций объектно-ориентированного программирования (ООП). Он описывает идею обертывания данных и методы, которые работают с данными в одном модуле, например, классе в 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);
}
}

Полиморфизм -
Полиморфизм - это способность данных обрабатывать более чем в одной форме. Это позволяет выполнять одну и ту же задачу разными способами. Он состоит из перегрузки метода и переопределения метода, т. Е. Однократной записи метода и выполнения ряда задач с использованием одного и того же имени метода.




#include <iostream>
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. Данные защищены от внешних функций.

Преимущества ООП -

  • Он очень хорошо моделирует реальный мир.
  • С ООП программы легко понять и поддерживать.
  • ООП предлагает возможность повторного использования кода. Уже созданные классы можно использовать повторно без необходимости их повторного написания.
  • ООП облегчает быструю разработку программ, где возможна параллельная разработка классов.
  • С помощью ООП программы легче тестировать, управлять и отлаживать.

Недостатки ООП -

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