Концепции OOPS в Java — пример концепций OOPS
Концепции объектно-ориентированного программирования очень важны для программирования. Не имея представления о концепциях ООП, вы не сможете проектировать системы в модели объектно-ориентированного программирования.
Что такое объектно-ориентированная модель программирования?
Модель объектно-ориентированного программирования вращается вокруг концепции объектов. Что такое объект? Объект является экземпляром класса. Он содержит свойства и функции. Они похожи на объекты реального мира. Например, ваша машина, дом, ноутбук и т. д. — все это объекты. У них есть определенные свойства и методы для выполнения определенных действий. Что такое класс? Класс определяет план Объектов. Они определяют свойства и функции объектов. Например, ноутбук — это класс, а ваш ноутбук — его экземпляр.
Концепции ООП
- Абстракция
- Инкапсуляция
- Полиморфизм
- Наследование
- Ассоциация
- Агрегация
- Композиция
Давайте рассмотрим эти концепции объектно-ориентированного программирования одну за другой. Мы будем использовать язык программирования 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. Наследование
Наследование — это концепция объектно-ориентированного программирования, в которой объект основан на другом объекте. Наследование — это механизм повторного использования кода. Объект, который наследуется, называется суперклассом, а объект, который наследует суперкласс, называется подклассом. Мы используем ключевое слово extends
в java для реализации наследования. Ниже приведен простой пример наследования в 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. Ассоциация
Ассоциация — это концепция ООП для определения отношений между объектами. Ассоциация определяет множественность между объектами. Например, объекты «Учитель» и «Ученик». Между учителем и учениками существует связь «один ко многим». Точно так же ученик может иметь отношения «один ко многим» с объектами учителя. Однако объекты «ученик» и «учитель» не зависят друг от друга.
Агрегация
Агрегация представляет собой особый тип ассоциации. В совокупности объекты имеют свой собственный жизненный цикл, но есть право собственности. Всякий раз, когда у нас есть отношения «HAS-A» между объектами и собственностью, это случай агрегации.
6. Состав
Композиция является частным случаем агрегации. Композиция является более ограничительной формой агрегации. Когда содержащийся объект в отношении \HAS-A не может существовать сам по себе, то это случай композиции. Например, Дом имеет Комнату. Здесь комната не может существовать без дома. чтобы быть лучше, чем наследование, читайте больше в Composition vs Inheritance.
Дополнительная литература: композиция в Java
Это все, что касается краткого обзора концепций ООП.
Вы можете ознакомиться с другими примерами программ Java из нашего репозитория GitHub.
Ссылки: https://docs.oracle.com/javase/tutorial/java/concepts/