Объектно-ориентированное программирование (ООП), одна из самых интересных тем в программировании, имеет много преимуществ по сравнению с процедурным программированием. Мы также обсудим некоторые важные методы ООП, такие как Инкапсуляция, Наследование, Полиморфизм, Абстракция. В этой серии уроков мы будем в основном использовать C++ для лучшего понимания . Но те же концепции применимы и к другим объектно-ориентированным языкам.
Сорт
Классы можно определить как прототип, идею, шаблон или схему объекта. Классы — это "строительные блоки" объектно-ориентированного программирования (ООП). Класс содержит свои собственные члены данных и функции-члены, доступ к которым и их использование можно получить, создав экземпляр этого класса. При объявлении класса память не выделяется.
Члены данных:переменные внутри определения класса
Функции-члены:определения функций, которые находятся внутри класса или те, которые присутствуют вне класса, но принадлежат классу
Класс можно определить с помощью ключевого слова Класс, за которым следует имя класса. Класс может быть определен в программе только один раз, т. е. каждый класс должен иметь уникальные имена классов. Вы не можете определить один класс несколько раз в программе.
class Student{ // Access specifier // Data members // Member functions };
Объект
Объект — это экземпляр класса. Память создается только после инициализации объекта, пока память не будет выделена. Объекты — это те, которые имеют состояние и поведение. Здесь состояниеозначает данные, а поведениеозначает функциональность.
Для класса может быть создано «n» объектов. Объект можно создать, используя имя класса, за которым следует имя объекта.
Student a; // an object 'a' is created for the class Student
Функция конструктора
Функция Constructor — это, по сути, функция, которая вызывается автоматически всякий раз, когда объект создается для класса. Функция-конструктор похожа на функцию по умолчанию , которая будет выполняться, если мы получим доступ к классу.
Функция Constructor имеет имя функции, такое же, как имя класса. В функции-конструкторе не будет возвращаемых значений, следовательно, нет возвращаемого типа. Конструкторы чаще всего объявляются в разделе public класса.
class Student{
public:
Student(){
cout << "Enter the RollNo:";
cin >> rno;
cout << "Enter the Name:";
cin >> name;
}
}
Здесь при доступе к Class Student автоматически вызывается и выполняется функция-конструктор.
Даже если мы не объявляем функцию-конструктор, компилятор автоматически создает функцию-конструктор при создании объекта для определенного класса.
Конструкторы бывают трех типов:
1. По умолчанию
2. Параметризованные (конструкторы с аргументами)
3. Копирующие конструкторы
Функция деструктора
Функция-деструктор при вызове уничтожает функцию-конструктор. Выполняется, когда завершается функция, завершается программа, завершается блок, содержащий локальную переменную, или вызывается оператор удаления.
Деструкторы также имеют то же имя, что и класс, которому предшествует символ тильда (~). Деструктор также не имеет типа возврата и аргументов.
class Student{
public:
Student(){ //Constructor
cout << "Enter the RollNo:";
cin >> rno;
cout << "Enter the Name:";
cin >> name;
}
~Student(); //Destructor
}
Если в классе не был прописан собственный деструктор, компилятор создает для нас деструктор по умолчанию. Когда класс содержит указатель на память, выделенную в классе, мы должны написать деструктор для освобождения памяти до того, как экземпляр класса будет уничтожен.
Спецификаторы доступа
Модификаторы доступа (или спецификаторы доступа) — это ключевые слова в объектно-ориентированных языках, которые устанавливают доступность классов, методов и других членов.
Надеюсь, вы заметили, что в приведенных выше кодах примеров конструктора и деструктора есть что-то, называемое «public». Они называются спецификаторами доступа. Эти спецификаторы доступа используются для определения области действия переменной, т. е. того, можно ли получить доступ к переменным, объявленным в классе, где угодно, в производном классе или нельзя получить доступ где угодно.
Спецификаторы доступа:
1. Общедоступные
2. Частные
3. Защищенные
Общественный
Переменные или функции, объявленные с помощью этих «общедоступных» спецификаторов доступа, могут быть доступны в любом месте в программе, т. е. к ним можно получить доступ вне класса.
class Student{ public: int roll_no; } int main(){ Student A; cout >> A.roll_no; //Valid return 0; }
Защищено
Доступ к переменным под «защищенными» спецификаторами доступа возможен внутри класса, а также в производном классе, но не за пределами класса.
class Student{ protected: int roll_no; } class Child_student : public Student{ public: int new_rollno = roll_no + 1; //Can access protected roll_no from this derived class } int main(){ Student A; cout >> A.roll_no; //Invalid return 0; }
Частный
Доступ к закрытым переменнымневозможен за пределами того же класса.
class Student{ private: int roll_no; } class Child_student : public Student{ public: int new_rollno = roll_no + 1; //Invalid } int main(){ Student A; cout >> A.roll_no; //Invalid return 0; }
Инкапсуляция
Процесс сокрытия «конфиденциальных данных» от пользователей для доступа к ним называется инкапсуляцией. Для этого члены данных должны быть объявлены как частные. Если вы хотите разрешить пользователям изменять или получать доступ к этим элементам данных, вы можете добиться этого, предоставив общедоступные методы получения и установки.
class Employee { private: int salary; // private data member public: //Setter void setSalary(int s) { salary = s; } //Getter { int getSalary() { return salary; } }; int main() { Employee myObj; myObj.setSalary(50000); cout << myObj.getSalary(); return 0; }
В приведенном выше коде мы можем установить значение salary равным 50000 с помощью метода установки. Затем мы можем вывести значение зарплаты с помощью функции getter. Итак, здесь цель состоит в том, чтобы мы могли получить доступ к закрытым членам данных внутри класса, используя некоторые общедоступные функции.
Добытчик
По сути, геттер — это функция, которая используется для получения значения и отображения его пользователю.
Сеттер
Setter — это функция для присвоения или установки значений переменной, которая объявлена как частная внутри класса.
Наследование
Наследование — это способность класса получать свойства и характеристики другого класса.
Синтаксис для наследования класса от его базового класса:
class subclass_name : access_mode base_class_name [ //body of the subclass }
Подкласс
Класс, который наследует свойства от другого класса
Супер Класс
Класс, свойства которого наследуются подклассом
//Base class or Parent class class Vehicle { public: string brand = "Ford"; void display() { cout << brand; } }; //Derived class or child class class Car : public Vehicle { public: string model = "Mustang"; } }; int main() { Car myCar; // Object myCar is created for class Car myCar.display; cout << myCar.brand + " " + myCar.model; return 0; }
В приведенном выше коде, хотя мы и не объявили строку brand в подклассе Car, мы можем получить доступ к атрибуту brand из его базового класса, поскольку он был унаследован в подкласс.
Способы наследования
Общественный
Если вы наследуете подкласс от общедоступного базового класса, тогда общедоступные атрибуты в базовом классе станут общедоступными , а защищенные атрибуты в базовом классе станет защищенным.
Защищено
Если подкласс является производным от защищенногобазового класса, то открытые и защищенные атрибуты станут защищенными в подклассе.
Частный
Если подкласс является производным от частногобазового класса, то общедоступные и защищенные атрибуты станут частными в подклассе.
Виды наследства
Единое наследство
Одиночное наследование — это производный подкласс только от одного базового класса.
Множественное наследование
Множественное наследование — это передача свойств более чем одного класса в подкласс.
Многоуровневое наследование
Этот тип наследования осуществляется путем наследования свойств производного класса или подкласса.
На приведенной выше диаграмме мы можем ясно понять, что класс C является производным от унаследованного класса «класс B». Следовательно, класс C также может получить доступ к атрибутам и свойствам класса A, поскольку класс B наследует свойства класса B.
Иерархическое наследование
При этом типе наследования от базового класса наследуется более одного подкласса.
Гибридное наследование
Гибридное наследование в основном реализует более одного типа наследования. Например: на следующей диаграмме реализованы Иерархическое и Множественное наследование.
Полиморфизм
Полиморфизм означает «множество форм» и возникает при наличии множества классов, связанных друг с другом путем наследования. То есть позволяет использовать одно действие по-разному.
Итак, это все об «объектно-ориентированном программировании». Я почти охватил основы ООП. Хотя я использовал C++ для примеров и фрагментов кода, то же самое применимо и к другим объектно-ориентированным языкам.
Удачного обучения!