---
title: Основны программирования
seo:
  title: Основны программирования — QA
  description: Тема «Основны программирования» для собеседования QA. Что такое ООП? Назовите его принципы с примерами? Что такое интерфейс? Что такое абстрактный класс? Чем они отличаются?
---

[Все темы QA](/qa)

## <strong>Что такое ООП? Назовите его принципы с примерами?</strong> [#q-14bee738d69b81a19793c61992ec5e87]

Объектно-ориентированное программирование (ООП) — это методология программирования, основанная на концепции объектов, которые объединяют данные и методы их обработки в единые сущности. Основные принципы ООП включают&#58;

- <strong>Инкапсуляция</strong>&#58; Скрытие деталей реализации объекта от
  внешнего мира и предоставление интерфейса для взаимодействия. Пример&#58;

```java
public class Car {
    private String model;
    private int year;

    public void setModel(String model) {
        this.model = model;
    }

    public String getModel() {
        return model;
    }
}
```

- <strong>Наследование</strong>&#58; Механизм, позволяющий одному классу
  наследовать свойства и методы другого класса. Пример&#58;

```java
public class Animal {
    public void eat() {
        System.out.println("Animal is eating");
    }
}

public class Dog extends Animal {
    public void bark() {
        System.out.println("Dog is barking");
    }
}
```

- <strong>Полиморфизм</strong>&#58; Возможность объектов с одним интерфейсом
  вызывать методы, которые будут выполнять различные действия в зависимости от
  типа объекта. Пример&#58;

```java
public interface Shape {
    void draw();
}

public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Circle is drawn");
    }
}

public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Rectangle is drawn");
    }
}
```

- <strong>Абстракция</strong>&#58; Выделение общих характеристик объекта и
  игнорирование лишних деталей для упрощения представления. Пример&#58;

```java
public abstract class Vehicle {
    abstract void move();
}

public class Car extends Vehicle {
    @Override
    void move() {
        System.out.println("Car is moving");
    }
}

public class Bicycle extends Vehicle {
    @Override
    void move() {
        System.out.println("Bicycle is moving");
    }
}
```

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

:::note[Ссылки для изучения]

1. [Что такое ООП](https://practicum.yandex.ru/blog/obektno-orientirovannoe-programmirovanie/)
   :::

---

## <strong>Что такое интерфейс? Что такое абстрактный класс? Чем они отличаются?</strong> [#q-14bee738d69b810aa08adc790cce1d78]

В контексте объектно-ориентированного программирования (ООП)&#58;

{/* prettier-ignore */}
1. <strong>Интерфейс (</strong><code>interface</code><strong>)</strong>&#58;

    - Это абстрактный тип данных, который определяет поведение объекта без конкретной реализации.

    - В Java интерфейс может содержать абстрактные методы, default- и static-методы с реализацией, а начиная с Java 9 также private-методы. Его поля являются public static final; состояния экземпляра и конструкторов нет.

    - Классы могут реализовывать несколько интерфейсов.

    - Пример&#58;

        ```java
        public interface Drawable {
            void draw();
        }
        ```

1. <strong>Абстрактный класс (</strong><code>abstract class</code><strong>)</strong>&#58;

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

    - Абстрактный класс может иметь конструкторы и переменные экземпляра.

    - Подкласс должен реализовать все абстрактные методы абстрактного класса или сам быть абстрактным.

    - Пример&#58;

        ```java
        public abstract class Shape {
            abstract void draw();
            void display() {
                System.out.println("Displaying shape");
            }
        }
        ```

<strong>Отличия&#58;</strong>

{/* prettier-ignore */}
- <strong>Интерфейс</strong>&#58;

    - В Java интерфейс может содержать абстрактные методы, default- и static-методы с реализацией, а начиная с Java 9 также private-методы. Его поля являются public static final; состояния экземпляра и конструкторов нет.

    - Не имеет конструкторов.

    - Поддерживает множественное наследование.

    - Используется для определения контрактов.

- <strong>Абстрактный класс</strong>&#58;

    - Может содержать как абстрактные, так и конкретные методы.

    - Имеет конструкторы.

    - Поддерживает одиночное наследование.

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

:::note[Ссылки для изучения]

1. [Разница между абстрактными классами и интерфейсами](https://javarush.com/groups/posts/1985-raznica-mezhdu-abstraktnihmi-klassami-i-interfeysami)
   :::
