
Одной из самых больших проблем для нового разработчика Java является изучение объектно-ориентированного программирования при изучении языка Java. Цель этого поста — познакомить вас с парадигмой объектно-ориентированного программирования. Мы также определим четыре основные концепции, определяющие объектно-ориентированное программирование.
Парадигмы программирования — это стратегия уменьшения сложности кода и определения потока выполнения. Существует несколько различных парадигм, таких как процедурная, функциональная и объектно-ориентированная. Эти парадигмы не исключают друг друга. Программы и языки программирования могут использовать несколько парадигм. Например, Python в первую очередь объектно-ориентированный, но он также процедурный и функциональный.
Проще говоря, парадигма может быть определена как стиль написания программы. ООП — одна из наиболее широко используемых парадигм сегодня из-за растущей популярности языков, которые ее используют, таких как Java, Python, C++ и других. Но способность ООП переводить реальные проблемы в код, возможно, является самым большим фактором его успеха.
Объектно-ориентированная парадигма была представлена в 1960-х годах Аланом Кэем. В то время эта парадигма не была лучшим вычислительным решением, учитывая малую масштабируемость разработанного тогда программного обеспечения. По мере повышения сложности программного обеспечения и реальных приложений объектно-ориентированные принципы становились лучшим решением.
Объектно-ориентированное программирование основано на наблюдении, что в физическом мире объекты состоят из многих видов более мелких объектов. ООП имеет высокую модульность, что упрощает понимание кода, делает его пригодным для повторного использования, добавляет уровни абстракции и позволяет перемещать блоки кода между проектами. Возможность комбинировать объекты — это только один из аспектов ООП. Другое дело использование классов. Чтобы помочь вам лучше понять ООП, я поясню некоторые его ключевые компоненты — классы, объекты и методы.
Класс – это логический блок кода, определяемый пользователем тип объекта, содержащий атрибуты (переменные) и поведение (реализованное с помощью методов). . В Java класс объявляется с помощью ключевого слова class. Атрибуты могут быть переменными, а поведение может быть функциями внутри них. Вы можете создавать экземпляры из этих классов, которые называются объектами. Другими словами, класс предоставляет план для создания объекта. Каждый объект, созданный из класса, имеет схожие свойства и функции. В более практическом плане предположим, что вы хотите записать атрибуты сотрудников в компании, такие как их должность и статус занятости. Вы можете создать класс с именем employee и удобно связать эти атрибуты в одном месте.
Далее давайте обсудим объекты. Как уже упоминалось, объект является экземпляром класса, и вы можете создать любое их количество. Состояние объекта включает в себя его атрибуты и поведение, и каждый из них имеет уникальный идентификатор, отличающий его от других экземпляров. Атрибуты и поведение класса определяют состояние объекта. Процесс создания объекта из класса называется создание экземпляра, поэтому объекты называются экземплярами. Например, вы можете создать объект emp1, вызвав класс employee. После звонка вы можете определить атрибуты должности и статуса занятости как аналитик данных и полный рабочий день соответственно. Это случай инстанцирования или создания экземпляра класса.
Наконец, существуют методы, которые представляют собой функции, определенные внутри класса и определяющие поведение экземпляра объекта. Допустим, вы хотите, чтобы объекты-служащие выводили строку, в которой указывается их должность. Сначала вы должны объявить введение их функции в классе сотрудников, а затем вызвать его для объекта, чтобы получить результат.
Теперь, когда вы знаете о классах, объектах и методах, давайте рассмотрим концепции, от которых зависит ООП.
Наследование
Первый — это наследование. Это механизм, который позволяет одному классу наследовать общее поведение и атрибуты другого класса. Оригинал называется родительским или суперклассом, а любые производные классы называются подклассом или дочерним классом.
Достичь наследования как концепции ООП в Java довольно просто. Наследование может быть таким же простым, как использование ключевого слова extends:
class Inventory {
}
class Produce extends Inventory {
}
Полиморфизм
Следующая концепция называется полиморфизм. Это слово означает наличие множества форм. В то время как наследование позволяет нам наследовать атрибуты и методы от другого класса. Полиморфизм использует эти методы для выполнения различных задач. Это позволяет нам выполнять одно и то же действие разными способами. Например, встроенный оператор плюс работает по-разному для разных типов данных. В случае целочисленных типов данных встроенный оператор плюс выполняет операции сложения, например, 3 плюс 5 равно 8. С другой стороны, в случае строкового типа данных встроенный оператор плюс выполняет конкатенацию или объединение двух строк. вместе. Эта способность изменять функциональность называется полиморфизмом.
В приведенном ниже примере полиморфизма как концепции ООП в Java у нас есть два класса: Person и Employee. Класс Employee наследуется от класса Person с помощью ключевого слова extends. Здесь дочерний класс переопределяет родительский класс.
class Person {
void walk() {
System.out.println(“Can walk.”);
}
}
class Employee extends Person {
void walk() {
System.out.println(“Walking fast...”);
}
public static void main(String arg[]) {
Person p = new Employee();
p.walk();
}
}
Инкапсуляция
Третье понятие — инкапсуляция. По определению, инкапсуляция описывает идею объединения данных и методов, работающих с этими данными, в одном модуле, подобном классу в Java. Это практика сохранения полей в классе закрытыми, а затем предоставление доступа к этим полям через общедоступные методы. Это понятие также часто используется, чтобы скрыть внутреннее представление или состояние объекта от внешнего. Инкапсуляция помогает предотвратить нежелательные модификации, фактически уменьшая количество ошибок и выходных данных.
// Here, the variable “name” is kept private or “encapsulated.”
public class Student {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class Test {
public static void main(String[] args) {
Student s = new Student();
s.setName(“Tom”);
System.out.println(s.getName());
}
}
Абстракция
Наконец, существует понятие абстракции. Абстракция данных — это процесс сокрытия определенных деталей и показа пользователю только важной информации. Абстракция — это выбор данных из большего пула, чтобы показать пользователю только важные сведения об объекте. Это помогает уменьшить сложность и усилия программирования. В Java абстракция реализуется с помощью абстрактного класса и интерфейса. Разница между абстракцией и инкапсуляцией заключается в том, что абстракция в программировании заключается в сокрытии нежелательных деталей при отображении наиболее важной информации, она решает проблемы на уровне проектирования, в то время как инкапсуляция решает проблемы на уровне реализации, связывая код и данные в единое целое. защищать информацию извне.
Лучшие практики для концепций ООП в Java
Цель концепций ООП в Java — сэкономить время без ущерба для безопасности и простоты использования. Следующие передовые методы ориентированы на достижение этой главной цели.
СУХОЙ — не пишите один и тот же код несколько раз.
DRY, или «Не повторяйся», — это основной принцип разработки программного обеспечения, направленный на уменьшение повторения информации. Принцип DRY гласит, что каждая часть знания или логики должна иметь единственное однозначное представление в системе. Разделите свой код и логику на более мелкие повторно используемые единицы и используйте этот код, вызывая его там, где хотите. Не пишите длинных методов, а разделите логику и попытайтесь использовать существующую часть в своем методе.
Single Responsibility — у одного класса есть одна обязанность
Когда мы разрабатываем наши классы, мы должны позаботиться о том, чтобы один класс отвечал за выполнение одной задачи или функции из всего набора обязанностей, которые у него есть. И только тогда, когда в этой конкретной задаче или функциональности необходимо внести изменения, следует изменять этот класс.
Открытый/Закрытый дизайн. Сделайте все методы и классы закрытыми для модификации, но открытыми для расширения.
Программные объекты, такие как классы, модули, функции и т. д.; должен иметь возможность расширять поведение класса, не изменяя его. Этот принцип отделяет существующий код от модифицированного режима, чтобы обеспечить лучшую стабильность, удобство сопровождения и минимизировать изменения в коде. Принцип открытости/закрытости обычно достигается за счет использования наследования и полиморфизма.
В ООП есть и другие важные концепции, такие как перегрузка методов, переопределение методов, конструкторы и другие, о которых мы узнаем далее.
Ознакомьтесь с моей Шпаргалкой по Java, кратким справочником для разработчиков, которым требуется повторное введение, или кратким руководством по программированию на Java здесь.