Поиск по сайту:

Концепции OOPS в Java — пример концепций OOPS


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

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

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

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

  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. Наследование

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