Когда дело доходит до объектно-ориентированного программирования, я обнаружил, что многие учебники усложняют понимание этой концепции. Чтобы хорошо это понять, давайте разберемся с проблемой, которую он решает.
Раньше у нас было процедурное программирование, которое делило программу на набор функций, и эти функции оперируют данными.
Но по мере роста программы мы получаем много функций, связанных друг с другом.
Когда мы вносим изменения в одну функцию, это может нарушить работу других функций, что проблематично.
Итак, ООП (объектно-ориентированное программирование) решает эту проблему. Он включает 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