Концепций объектно-ориентированного программирования Java

объектно-ориентированного программирования Java Программирование и разработка

объектно-ориентированного программирования Java

Объектно-ориентированное программирование (ООП) — это парадигма программирования, которая существует уже несколько десятилетий и присутствует в популярных языках программирования, таких как Java, Python и C.

Этот метод структурирования программы использует объекты, обладающие свойствами и поведением. Java — это объектно-ориентированный язык программирования, основанный на классах, с принципом «напиши один раз, запусти где угодно».

Сегодня мы узнаем о концепциях ООП в Java. Мы рассмотрим основы синтаксиса и основные концепции. К концу вы сможете создавать классы и инициализировать объекты Java.

Обзор объектно-ориентированного программирования (ООП) в Java

Объектно-ориентированное программирование, также называемое ООП, представляет собой парадигму программирования, основанную на концепции классов и объектов. У объектов есть свои свойства и поведение. Класс подобен плану для создания объектов.

В ООП объект определяется со своими собственными свойствами. Например, скажем, наш объект — сотрудник. Этими свойствами могут быть их имя, возраст и роль. ООП позволяет легко моделировать объекты реального мира и отношения между ними.

Фактически, объекты в программе часто представляют объекты реального мира. Многие новички предпочитают использовать языки ООП, потому что они более интуитивно понятны. ООП также помогает решить проблему сложности за счёт разделения программы на разные объекты.

Четыре основных принципа ООП — это наследование, инкапсуляция, абстракция и полиморфизм. Мы рассмотрим их позже, используя Java.

Если вы знакомы с программированием на Java, вы, должно быть, заметили, что всякий раз, когда программа пишется, она записывается внутри класса, например public class. Вообще говоря, этот класс называется главным классом. Даже базовая программа на Java использует классы, поэтому Java является языком ООП.

Простой пример Java ООП

Мы рассмотрим это более подробно, но вот простой пример для начала. Следующий код создаёт Dogи сохраняет разные объекты.

public class Dog {};
Dog GermanShephered = new Dog();
Dog Bulldog = new Dog();
Dog Labrador = new Dog();

Простой пример Java ООП

Процедурное и ООП

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

Объектно-ориентированное программирование имеет следующие преимущества перед процедурным программированием:

  • ООП обеспечивает чёткую структуру программ
  • ООП помогает сохранить СУХОЙ код Java (не повторяйтесь)
  • ООП упрощает обслуживание, изменение и отладку кода Java.
  • ООП позволяет создавать полностью повторно используемые приложения с меньшим количеством кода и более коротким временем разработки.

Определение: DRY — это принцип разработки программного обеспечения, направленный на сокращение повторения шаблонов программного обеспечения путём замены его абстракциями или с помощью нормализации данных.

Объекты в Java

В реальном мире мы можем идентифицировать вещи с определёнными состояниями и поведением как объект. Например, у автомобиля есть название, цвет и марка. Мы можем классифицировать эти свойства как его атрибуты или состояние, а «вождение» — как его поведение.

В Java ООП объекты похожи. Мы создаём объект и определяем его состояния / поведение. Объекты — это экземпляр класса или сущности с определёнными данными. Думайте о классе как о схеме для создания объекта.

Например, мы могли бы иметь класс Carи экземпляр этого класса быть Truck1с атрибутами ford, blueи used.

Примечание: объект и экземпляр — это одно и то же. Слово instance указывает отношение объекта к его классу.

У объекта есть три основных характеристики:

  • Состояние: представляет данные (или значение) объекта.
  • Поведение: представляет функциональность объектов, отображаемых с помощью методов.
  • Идентичность: идентификация объекта реализуется с помощью уникального идентификатора. Значение используется внутри виртуальной машины Java (JVM) для идентификации каждого объекта.

Как создать объект на Java

Следующие шаги выполняются, когда вы хотите создать объект:

1. Объявление: объявление переменной с именем переменной с типом объекта. Вы объявляете переменную, записывая:

type objectName;

2. Создание экземпляра: в Java ключевое слово используется для создания экземпляра объекта. newКлючевое слово выделяет память для нового объекта и возвращает ссылку на эту память.
3. Инициализация: Ключевое слово сопровождается вызовом конструктора. Этот вызов инициализирует новый объект. Инициализировать объект — значит сохранить данные в объекте.

Читайте также:  Как объединить массивы в C++?

Методы в Java

Методы используются для выполнения определённых действий. Они представляют поведение объекта. Они могут быть publicили private, т.е. к ним нельзя получить доступ извне, но они должны быть объявлены внутри класса. Методы можно определить, как группу операторов, которые выполняют некоторые операции и могут возвращать или не возвращать результат.

Продолжая нашу аналогию с автомобилем, следующий фрагмент кода показывает пример метода на Java:

class Car {
  // Public method to print speed
  public void printSpeed(int speed) {
    System.out.println(«Speed: » + speed);
    }
}
class Demo {
  public static void main(String args[]) {
    Car car = new Car();
    car.printSpeed(100); // calling public method
  }
}

Параметры метода используются для передачи данных в метод, а возвращаемый тип получает значение из метода, если таковое имеется. В ООП есть два популярных метода:

  • get Метод, который получает значение конкретного поля данных.
  • set Метод устанавливает своё значение.
class Demo {
   public static void main(String args[]) {
     Car car = new Car();
     car.setSpeed(100); // calling the setter method
     System.out.println(car.getSpeed()); // calling the getter method
   }
}

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

Перегрузка метода — это пример статического полиморфизма. Полиморфизм — важная концепция ООП, которую мы рассмотрим позже.

Классы на Java

Класс — это группа объектов, имеющих общие свойства. Они используются для создания пользовательских типов данных. Подумайте об этом Classкак о конструкторе объекта или «чертеже» для создания объектов. Мы можем использовать базовые типы данных для создания наших классов. Классы могут содержать несколько методов, переменных, конструкторов и функций.

Классы на Java

Некоторые преимущества использования классов включают:

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

Как объявить класс в Java

В Java классы определены, как показано ниже. Здесь classкоманда сообщает компилятору, что мы создаём собственный класс. Все члены класса будут определены в рамках класса.

class ClassName { // Class name
  /* All member variables
  and methods*/
}

Давайте посмотрим на структуру класса. Обратите внимание, как { }удерживаются все члены класса.

//The Structure of a Java Class
class Car { // Class name
  // Class Data members
  int topSpeed;
  int totalSeats;
  int fuelCapacity;
  String manufacturer;
  // Class Methods
  void refuel(){
    …
  }
  void park(){
    …
  }
  void drive(){
    …
  }
}

После создания класса нам нужно определить объекты или экземпляры этого класса. Имя класса ClassNameбудет использоваться для создания экземпляра класса в нашей основной программе. Мы можем создать объект класса, используя ключевое слово new:

class ClassName { // Class name
  …
    // Main method
    public static void main(String args[]) {
    ClassName obj = new ClassName(); // className object
  }
}

Абстрактные классы

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

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

У абстрактного класса может быть абстрактный метод, в отличие от обычного класса. Абстрактный метод не имеет тела или определения и не должен быть частным, его объявление должно иметь:

  • Идентификатор доступа.
  • Ключевое слово abstract.
  • Тип возврата.
  • Название метода.
  • Параметры, которые необходимо передать.
  •  «;» в конце объявления.

В абстрактном классе может быть всё остальное, как и в обычном классе Java, то есть конструктор, статические переменные и методы.

Конструкторы в Java

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

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

Есть 2 основных типа конструкторов:

  • Конструктор по умолчанию: он также известен как конструктор без аргументов. Это самый простой конструктор. Здесь определены значения по умолчанию для элементов данных класса, который создаёт объект с элементами данных, инициализированными значениями по умолчанию.
  • Параметризованный конструктор: в параметризованном конструкторе мы передаём аргументы конструктору и устанавливаем их как значения наших членов данных. Они используются для установки полей класса с вашими собственными значениями.
Читайте также:  Локальная аутентификация с использованием паспорта в Node.js

Если конструктор не определён в классе, JVC вставит конструктор по умолчанию без аргумента и установит для своих аргументов значение null или ноль.

Следующий фрагмент кода поможет вам лучше понять конструкторы по умолчанию и параметризованные конструкторы. Здесь у нас есть Date класс с конструктором по умолчанию, и мы создадим из него объект в нашем main():

class Date {
  private int day;
  private int month;
  private int year;
  // Default constructor
  public Date() {
    // We must define the default values for day, month, and year
    day = 0;
    month = 0;
    year = 0;
  }
  // Parameterized constructor
  public Date(int d, int m, int y){
    // The arguments are used as values
    day = d;
    month = m;
    year = y;
  }
  // A simple print function
  public void printDate(){
    System.out.println(«Date: » + day + «/» + month + «/» + year);
  }
}
class Demo {
  public static void main(String args[]) {
    // Call the Date constructor to create its object;
    Date paramDate = new Date(1, 8, 2018); // Object created with specified values!
    Date defaultDate = new Date(); // Object created with default values!
    paramDate.printDate();
    defaultDate.printDate();
  }
}

Расширенные концепции ООП в Java

Расширенные концепции ООП в Java

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

Инкапсуляция — это метод в ООП, который используется для сокрытия данных. Думайте об инкапсуляции как о защитной оболочке, которая предотвращает доступ к данным для любого кода за пределами своего класса.

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

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

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

Хорошим примером инкапсуляции может быть реализация авторизации. Поля имени пользователя и пароля будут объявлены как закрытые. Для этих данных будут реализованы общедоступные методы.

Упрощённо: поля, содержащие данные, являются частными, а общедоступные методы предоставляют интерфейс для доступа к этим полям.

поля, содержащие данные, являются частными, а общедоступные методы предоставляют интерфейс для доступа к этим полям

Наследование в Java

Наследование — важный принцип в ООП. В Java наследование — это механизм, в котором дочерний класс наследует атрибуты родительского класса.

Когда дочерний класс определён, он основан на существующем классе (родительском классе) и расширяет общие методы или члены данных родительского класса. Производный класс extends от базового класса, чтобы унаследовать его свойства.

Наследование поддерживает возможность повторного использования, что очень важно в объектно-ориентированном программировании. Это может помочь нам обновить определённые части нашего Java-кода без изменения его основных атрибутов.

This Ключевое слово в Java используется для обозначения экземпляра текущего класса.

Подобным образом super ключевое слово в Java используется для ссылки на члены суперкласса изнутри непосредственного подкласса.

Наследование в Java

Полиморфизм в Java

Полиморфизм — это функция ООП, которая позволяет различать сущности с одинаковыми именами. Это позволяет нам выполнять одно действие разными способами. Полиморфизм используется в Java, потому что он помогает нам повторно использовать код. Одна переменная может использоваться для хранения нескольких типов данных.

Упрощённо: полиморфизм относится к одному и тому же объекту, проявляющему разные формы и поведение.

Хорошим примером может быть класс, в Shape котором есть getArea() метод для поиска области различных форм. У класса Shape будет только один общедоступный метод getArea().

Тогда у нас могут быть классы, расширяющие этот Shape класс, например, Rectangle и Circle классы. Каждый класс будет реализовывать getArea() метод по-разному. Давайте посмотрим, как это будет выглядеть с помощью следующего кода:

// A sample class Shape which provides a method to get the Shape’s area
class Shape {
  public double getArea() {
    return 0;
  }
}
// A Rectangle is a Shape with a specific width and height
class Rectangle extends Shape {   // extended form the Shape class
  private double width;
  private double height;
  public Rectangle(double width, double heigh) {
    this.width = width;
    this.height = heigh;
  }
  public double getArea() {
    return width * height;
  }
}
// A Circle is a Shape with a specific radius
class Circle extends Shape {
  private double radius;
  public Circle(double radius) {
    this.radius = radius;
  }
  public double getArea() {
    return 3.14 * radius * radius;
  }
}
class driver {
  public static void main(String args[]) {
    Shape[] shape = new Shape[2]; // Creating shape array of size 2
    shape[0] = new Circle(2); // creating circle object at index 0
    shape[1] = new Rectangle(2, 2); // creating rectangle object at index 1
    System.out.println(«Area of the Circle: » + shape[0].getArea());
    System.out.println(«Area of the Rectangle: » + shape[1].getArea());
  }
}

В ООП есть два типа полиморфизма. Полиморфизм, который разрешается во время компиляции, известен как статический полиморфизм. Перегрузка метода — прекрасный пример статического полиморфизма.

С другой стороны, динамический полиморфизм разрешается во время выполнения. Переопределение метода используется в динамическом полиморфизме. Он включает в себя переопределение метода родительского класса в подклассе.

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

Что изучать дальше

Поздравляю, вы дочитали до конца. Вы познакомились с основами концепций ООП в Java. Теперь вы можете приступить к реализации концепций ООП в своих программах на Java. Ещё многое предстоит узнать о Java OOP, а именно:

  • Агрегирование.
  • Структуры данных с ООП.
  • Интерфейсы.
  • Спецификаторы доступа.
  • Составные отношения.
Оцените статью
bestprogrammer.ru
Добавить комментарий