Объектно-ориентированные концепции программирования очень важны для разработки. Без представления о концепциях ООП вы не сможете проектировать системы в объектно-ориентированной модели программирования.
Что такое модель объектно-ориентированного программирования?
Модель объектно-ориентированного программирования вращается вокруг концепции объектов. Что такое объект? Объект – это экземпляр класса. Он содержит свойства и функции. Они подобны объектам реального мира. Например, ваш автомобиль, дом, ноутбук и т. д. – все это объекты. У них есть определенные свойства и методы для выполнения определенных действий. Что такое класс? Класс определяет чертеж объектов. Он определяет свойства и функциональность объектов. Например, “Ноутбук” – это класс, а ваш ноутбук – экземпляр этого класса.
Концепции ООП
Основные концепции ООП:
- Абстракция
- Инкапсуляция
- Полиморфизм
- Наследование
- Ассоциация
- Агрегация
- Композиция
Давайте рассмотрим эти концепции объектно-ориентированного программирования поочередно. Мы будем использовать язык программирования Java для приведения примеров кода, чтобы вы знали, как реализовать концепции ООП на Java.
1. Абстракция
Абстракция – это концепция скрытия внутренних деталей и описание вещей простыми терминами. Например, метод, который складывает два целых числа. Внутренняя обработка метода скрыта от внешнего мира. Существует много способов достижения абстракции в объектно-ориентированном программировании, таких как инкапсуляция и наследование. Программа на Java также отличный пример абстракции. Здесь Java заботится о преобразовании простых выражений в машинный язык и скрывает внутренние детали реализации от внешнего мира.
Дополнительное чтение: Что такое абстракция в ООП?
2. Инкапсуляция
Инкапсуляция – это техника, используемая для реализации абстракции в объектно-ориентированном программировании. Инкапсуляция используется для ограничения доступа к членам класса и методам. Ключевые слова модификаторы доступа используются для инкапсуляции в объектно-ориентированном программировании. Например, инкапсуляция в Java достигается с помощью ключевых слов private
, protected
и public
.
3. Полиморфизм
Полиморфизм – это концепция, при которой объект ведет себя по-разному в разных ситуациях. Существуют два типа полиморфизма – полиморфизм времени компиляции и полиморфизм времени выполнения. Полиморфизм времени компиляции достигается с помощью перегрузки методов. Например, мы можем иметь класс как показано ниже.
public class Circle {
public void draw(){
System.out.println("Drwaing circle with default color Black and diameter 1 cm.");
}
public void draw(int diameter){
System.out.println("Drwaing circle with default color Black and diameter"+diameter+" cm.");
}
public void draw(int diameter, String color){
System.out.println("Drwaing circle with color"+color+" and diameter"+diameter+" cm.");
}
}
Здесь у нас есть несколько методов draw
, но они имеют разное поведение. Это случай перегрузки методов, потому что все методы имеют одно и то то же имя, а аргументы различны. Здесь компилятор сможет определить метод для вызова на этапе компиляции, поэтому это называется полиморфизмом времени компиляции. Полиморфизм времени выполнения реализуется, когда между объектами существует отношение “IS-A”. Это также называется переопределением метода, потому что подкласс должен переопределить метод суперкласса для полиморфизма времени выполнения. Если мы работаем в терминах суперкласса, фактический класс реализации определяется на этапе выполнения. Компилятор не может определить, какой метод класса будет вызван. Это решение принимается на этапе выполнения, отсюда и название – полиморфизм времени выполнения или динамическое перенаправление методов.
package com.journaldev.test;
public interface Shape {
public void draw();
}
package com.journaldev.test;
public class Circle implements Shape{
@Override
public void draw(){
System.out.println("Drwaing circle");
}
}
package com.journaldev.test;
public class Square implements Shape {
@Override
public void draw() {
System.out.println("Drawing Square");
}
}
Shape
является суперклассом, а есть два подкласса Circle
и Square
. Ниже приведен пример полиморфизма времени выполнения.
Shape sh = new Circle();
sh.draw();
Shape sh1 = getShape(); //some third party logic to determine shape
sh1.draw();
В приведенных выше примерах компилятор Java не знает фактического класса реализации Shape, который будет использоваться на этапе выполнения, следовательно, это полиморфизм времени выполнения.
4. Наследование
Наследование – это концепция объектно-ориентированного программирования, где объект основан на другом объекте. Наследование является механизмом повторного использования кода. Объект, который наследуется, называется суперклассом, а объект, который наследует суперкласс, называется подклассом. В Java мы используем ключевое слово extends
для реализации наследования. Ниже приведен простой пример наследования в Java.
package com.journaldev.java.examples1;
class SuperClassA {
public void foo(){
System.out.println("SuperClassA");
}
}
class SubClassB extends SuperClassA{
public void bar(){
System.out.println("SubClassB");
}
}
public class Test {
public static void main(String args[]){
SubClassB a = new SubClassB();
a.foo();
a.bar();
}
}
5. Ассоциация
Ассоциация – это концепция ООП, определяющая отношение между объектами. Ассоциация определяет множественность между объектами. Например, объекты Преподаватель и Студент. Существует отношение один-ко-многим между преподавателем и студентами. Аналогично, студент может иметь отношение один-ко-многим с объектами преподавателей. Однако и студент, и преподаватель являются независимыми друг от друга.
Агрегация
Агрегация – это особый тип ассоциации. При агрегации объекты имеют свой собственный жизненный цикл, но существует владение. Когда между объектами существует отношение “ИМЕЕТ” и владение, то это случай агрегации.
6. Состав
Состав – это особый случай агрегации. Состав представляет собой более ограниченную форму агрегации. Когда содержащийся объект в отношении “ИМЕЕТ” не может существовать сам по себе, это случай состава. Например, у Дома есть Комната. Здесь комната не может существовать без дома. Говорят, что состав лучше наследования, подробнее см. в Состав против Наследования.
Дополнительное чтение: Состав в Java
Это все для быстрого обзора концепций ООП.
Вы можете ознакомиться с большим количеством примеров программ на Java в нашем Репозитории на GitHub.
Ссылки: https://docs.oracle.com/javase/tutorial/java/concepts/
Source:
https://www.digitalocean.com/community/tutorials/oops-concepts-java-example