Понятия ООП в Java – Примеры понятий ООП

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

Что такое модель объектно-ориентированного программирования?

Модель объектно-ориентированного программирования вращается вокруг концепции объектов. Что такое объект? Объект – это экземпляр класса. Он содержит свойства и функции. Они подобны объектам реального мира. Например, ваш автомобиль, дом, ноутбук и т. д. – все это объекты. У них есть определенные свойства и методы для выполнения определенных действий. Что такое класс? Класс определяет чертеж объектов. Он определяет свойства и функциональность объектов. Например, “Ноутбук” – это класс, а ваш ноутбук – экземпляр этого класса.

Концепции ООП

Основные концепции ООП:

  1. Абстракция
  2. Инкапсуляция
  3. Полиморфизм
  4. Наследование
  5. Ассоциация
  6. Агрегация
  7. Композиция

Давайте рассмотрим эти концепции объектно-ориентированного программирования поочередно. Мы будем использовать язык программирования 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