Когда дело доходит до объектно-ориентированного программирования, я обнаружил, что многие учебники усложняют понимание этой концепции. Чтобы хорошо это понять, давайте разберемся с проблемой, которую он решает.

Раньше у нас было процедурное программирование, которое делило программу на набор функций, и эти функции оперируют данными.

Но по мере роста программы мы получаем много функций, связанных друг с другом.

Когда мы вносим изменения в одну функцию, это может нарушить работу других функций, что проблематично.

Итак, ООП (объектно-ориентированное программирование) решает эту проблему. Он включает 4 мини-концепции: инкапсуляция, абстракция, наследование и полиморфизм.

1- Инкапсуляция

Это означает создание группы связанных полей и функций в единицу, называемую объектом.

Мы называем эти поля свойствами, а эти функции методами.

Пример:

У Учителя есть свойства, например, baseSalary, overtime, rate, методы, например getWage (), и сеттеры для обновления значений свойств, и геттеры для получения значений свойств.

package com.selcote.abstraction;
public class Employee{
    private float baseSalary;
    private float rate;
    private float overtime;
    
    public float getWage(){
        return this.baseSalary + (rate * overtime);
    }

    public float getBaseSalary() {
        return baseSalary;
    }

    public void setBaseSalary(float baseSalary) {
        this.baseSalary = baseSalary;
    }

    public float getRate() {
        return rate;
    }

    public void setRate(float rate) {
        this.rate = rate;
    }

    public float getOvertime() {
        return overtime;
    }

    public void setOvertime(float overtime) {
        this.overtime = overtime;
    }
      
}

Как видите, метод getWage () не имеет параметров, он имеет доступ к свойствам объектов и работает с ними, без необходимости передавать ему параметры. И это одна из лучших практик, когда есть методы без параметров.

Чем меньше параметров, тем проще использовать и поддерживать эту функцию.

В дополнение к этому мы сделали свойства закрытыми, мы можем получить к ним доступ, просто передав методы установки и получения, которые скрывают значения или состояние объекта структурированных данных внутри класса и предотвращают к ним прямой доступ неуполномоченные лица.

2- Абстракция

Эта техника заключается в том, чтобы скрыть детали снаружи, что дает нам много преимуществ.

Мы можем скрыть многие методы объекта, сделав их частными, и предоставить лишь меньшее количество общедоступных методов.

Таким образом, тем самым мы упрощаем интерфейс нашего объекта.

Лучше использовать и понимать объект с меньшим количеством методов и свойств, чем объект с большим количеством методов и свойств.

Кроме того, эта концепция снижает влияние изменения, а это означает, что если вы измените какие-либо частные или внутренние методы, это не приведет к утечке наружу. Потому что ни один из этих методов или свойств неизвестен за пределами этого содержащего объекта.

Кроме того, мы можем предоставить внешнему только интерфейс, и реализация будет определена во время выполнения.

Пример:

package com.selcote.abstraction;  
public interface Car {  
 void turnOn();   
 void turnOff();   
}

package com.selcote.abstraction;
public class ManualCar implements Car {   
   @Override  
   public void turnOn() {  
     System.out.println("turn on the manual car");  
   }   
   @Override  
   public void turnOff() {   
     System.out.println("turn off the manual car");  
   }  
 
}
package com.selcote.abstraction;
public class AutomaticCar implements Car { 
  
    @Override  
    public void turnOnCar() {   
       System.out.println("turn on the automatic car");  
    }   
    @Override  
    public void turnOffCar() {    
      System.out.println("turn off the automatic car");   
    }  
}

Давайте проверим функции автомобиля:

package com.selcote.abstraction;
public class CarTest {  
 public static void main(String[] args) {   
       Car car1 = new ManualCar();   
       Car car2 = new AutomaticCar();    
       car1.turnOnCar();   
       car1.turnOffCar();     
       car2.turnOnCar();   
       car2.turnOffCar();  
       
 }  
}

Выход:

turn on the manual car
turn off the manual car
turn on the automatic car
turn off the automatic car

Клиентская программа знает только об автомобиле и функциях, которые он предоставляет.

Детали внутренней реализации скрыты от клиентской программы.

3- Наследование

Этот механизм позволяет нам избавиться от избыточного кода.

Давайте подумаем об элементах html, таких как TextBox, Select, CheckBox и т. Д. У этих элементов есть некоторые общие черты, такие как свойства и методы hidden и innerHtml, такие как click () и focus ().

Вместо того, чтобы переопределять эти свойства и методы для каждого типа элемента Html, мы можем определить их в универсальном объекте, называемом HtmlElement, и получить другие объекты, унаследованные от него.

4- Полиморфизм

Если мы попытаемся понять это составляющее имя, Поли означает Многие, а морфизм означает Форма, Итак:

Полиморфизм = Множество форм

Это метод, позволяющий избавиться от операторов i f и else или switch.

Итак, полиморфизм - это способность метода делать разные вещи в зависимости от объекта, на который он воздействует. Другими словами, полиморфизм позволяет вам определять один интерфейс и иметь несколько реализаций.

Пример:

public class Animal{
   public void sound(){
      System.out.println("Animal is making a sound");   
   }
}
class Dog extends Animal{
    @Override
    public void sound(){
        System.out.println("Barking");
    }
    public static void main(String args[]){
    	Animal obj = new Dog();
    	obj.sound();
    }
}

Выход:

Barking
class Cat extends Animal{
    @Override
    public void sound(){
        System.out.println("Meow");
    }
    public static void main(String args[]){
    	Animal obj = new Cat();
    	obj.sound();
    }
}

Выход:

Meow

Вывод:

ООП значительно упростило область программирования, решив многие проблемы:

Инкапсуляция = ›СНИЖЕНИЕ СЛОЖНОСТИ + ПОВЫШЕНИЕ ВОЗМОЖНОСТИ ПОВТОРНОГО ИСПОЛЬЗОВАНИЯ

Абстракция = ›СНИЖЕНИЕ СЛОЖНОСТИ + СНИЖЕНИЕ ВЛИЯНИЯ ИЗМЕНЕНИЙ В КОДЕ

Наследование = ›УДАЛИТЬ ИЗБЫТОЧНЫЙ КОД

Polymorphisme = ›Рефакторинг операторов if / switch case

Поделитесь со мной своими мыслями в комментарии и сделайте аплодисменты :-)

Также подумайте о том, чтобы подписаться на меня в среде и подписаться на мой канал: Selcote (сообщество специалистов по решению проблем), чтобы получить более интересный контент.

Рекомендуемые книги

Чистый код: руководство по созданию гибкого программного обеспечения

Шаблоны проектирования в первую очередь: руководство для мозга

Чистая архитектура

► Компьютер и монитор

Новый Apple MacBook Pro

27-дюймовый монитор Dell Ultrasharp U2719D

Настольное крепление с двумя ручками

Многопортовый адаптер USB-концентратора C

IDE, которую я использую для кодирования:

- IntelliJ
- Vscode