OOP Flashcards
(22 cards)
Что такое ООП (объектно-ориентированное программирование)?
ООП — это парадигма программирования, основанная на использовании объектов и классов.
Она помогает организовать код так, чтобы он был более понятным, масштабируемым и повторно используемым.
Назовите 4 принципа ООП.
Абстракция, Инкапсуляция, Наследование, Полиморфизм.
Что такое абстракция?
Это принцип, позволяющий скрыть детали реализации и показать только необходимый функционал.
Пример: интерфейс List скрывает, как работает ArrayList внутри.
Что такое инкапсуляция?
Это объединение данных и методов в одном классе с ограничением прямого доступа к ним.Пример: приватные поля name и age, доступные только через геттеры/сеттеры.
public class Student {
private String name;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
Что такое наследование?
Это механизм, позволяющий создавать новый класс на основе существующего.Пример:
public class Student {}
public class Wizard extends Student {}
Что такое полиморфизм?
Это способность использовать объекты подклассов как объекты суперкласса.
Student s = new Wizard();
s.printInfo();
Какой практический плюс даёт полиморфизм?
Возможность писать универсальный код, работающий с разными реализациями через один интерфейс или суперкласс.
Что такое принцип наследование в ООП, Зачем он нужен?
Наследование — это принцип объектно-ориентированного программирования, который позволяет создавать новый класс на основе уже существующего. Новый класс (называемый подклассом или дочерним классом) наследует поля и методы существующего класса (суперкласса), что позволяет повторно использовать код и расширять функциональность.
Это особенно полезно, когда у нескольких классов есть общие характеристики. Вместо того чтобы дублировать код, мы выносим его в родительский класс и наследуем.
В Java мы используем ключевое слово extends, чтобы указать, что один класс наследует другой.
Как обозначается наследование в Java?
С помощью ключевого слова extends.
public class Wizard extends Student { … }
Пример кода наследование в Java:
public class Student {
protected String name;
public Student(String name) { this.name = name; } public void printInfo() { System.out.println("Student: " + name); } }
// Наследуемый класс
public class Wizard extends Student {
private String house;
public Wizard(String name, String house) { super(name); // Вызов конструктора родителя this.house = house; } @Override public void printInfo() { System.out.println("Wizard: " + name + ", House: " + house); } }
Что такое полиморфизм в ООП? Как работает полиморфизм?
Полиморфизм (от греч. “много форм”) — это способность объекта использовать методы родительского класса, но с поведением, определённым в подклассе.
Он позволяет:
обращаться к объектам подклассов через ссылки на суперкласс;
вызывать методы, которые переопределены в этих подклассах;
писать универсальный код, который работает с разными типами.
Пример кода полиморфизм в Java:
class Student {
public void sayHello() {
System.out.println(“Hello from Student”);
}
}
class Wizard extends Student {
@Override
public void sayHello() {
System.out.println(“Hello from Wizard”);
}
}
public class Main {
public static void main(String[] args) {
Student s1 = new Student();
Student s2 = new Wizard(); // полиморфизм
s1.sayHello(); // Hello from Student s2.sayHello(); // Hello from Wizard (используется метод подкласса) } }
Дайте определение принципа абстракции в ООП.
Абстракция в ООП — это принцип, позволяющий скрыть сложные детали реализации объекта и показывать только нужный функционал для внешнего использования.
Это как пульт от телевизора: ты нажимаешь кнопку, и пульт передаёт сигнал — ты не знаешь, как он работает внутри, тебе это и не нужно.
Как реализуется абстракция в Java? Приведи пример.
Абстракция реализуется через абстрактные классы и интерфейсы, которые скрывают реализацию и определяют только внешний контракт.
// Абстрактный класс
abstract class Animal {
abstract void makeSound();
}
class Dog extends Animal {
void makeSound() {
System.out.println(“Woof!”);
}
}
// Интерфейс
interface Flyable {
void fly();
}
class Bird implements Flyable {
public void fly() {
System.out.println(“Flies with wings”);
}
}
Какие элементы языка отвечают за инкапсуляцию?
В Java за инкапсуляцию отвечают модификаторы доступа (private, public, protected, default), а также геттеры и сеттеры.
Что делает инкапсуляция?
Объединяет данные и поведение в одном классе и ограничивает доступ к внутренним данным извне.
Как выглядит пример инкапсуляции в коде?
public class Student {
private String name; // скрытое поле
public String getName() { return name; } public void setName(String name) { this.name = name; } }
В чём разница между инкапсуляцией и абстракцией?
Инкапсуляция скрывает реализацию на уровне кода (например, через private), а абстракция скрывает детали системы и показывает только нужный интерфейс.
Какие элементы языка отвечают за наследование?
extends — используется при объявлении класса-наследника:
public class Wizard extends Student { … }
@Override — аннотация, помогающая явно указать, что метод переопределяется из родительского класса:
@Override
public void printInfo() {
…
}
Родительский класс — это суперкласс (superclass), дочерний класс — это подкласс (subclass).
Что делает ключевое слово super в Java?
Вызывает конструктор родительского класса:
public Wizard(String name, String house) {
super(name); // вызывает конструктор Student(String name)
this.house = house;
}
Обращается к методу родителя:
@Override
public void printInfo() {
super.printInfo(); // вызывает метод из родителя
System.out.println(“House: “ + house);
}
Важно помнить:
super() должно быть первой строкой в конструкторе.
super можно использовать и для обращения к полям, если они не переопределены.
Какие элементы языка отвечают за полиморфизм?
Полиморфизм в Java обеспечивается рядом языковых элементов. Во-первых, это наследование с помощью ключевого слова extends, которое позволяет одному классу быть подтипом другого. Во-вторых, это переопределение методов с использованием аннотации @Override. Наконец, это возможность создавать переменные суперкласса, которые указывают на объекты подклассов.
Например:
Student s = new Wizard(“Harry”, “Gryffindor”);
s.printInfo();
Хотя переменная типа Student, вызывается метод из Wizard, что демонстрирует полиморфизм во время выполнения.
Какая связь между 4 принципами ООП?
Абстракция — показывает только нужный функционал.
Инкапсуляция — ограничивает доступ к данным.
Наследование — повторно использует код.
Полиморфизм — обрабатывает разные типы объектов единым способом.