Какие знаешь принципы ООП

Ответ

  • Инкапсуляция – сокрытие внутренней реализации и предоставление доступа через публичные методы.

    class User {
        private var name: String = ""
        fun setName(name: String) { this.name = name }
        fun getName(): String = name
    }
  • Наследование – создание новых классов на основе существующих (расширение функциональности).

    open class Animal { fun eat() {} }
    class Dog : Animal() { fun bark() {} }
  • Полиморфизм – возможность объектов с одинаковым интерфейсом иметь разную реализацию.

    interface Shape { fun draw() }
    class Circle : Shape { override fun draw() { /*...*/ } }
  • Абстракция – выделение ключевых характеристик объекта, игнорируя несущественные детали.

    abstract class Vehicle { abstract fun move() }

Ответ 18+ 🔞

А, ну это же классика, ёпта! Сидишь такой на собеседовании, а тебе: «Расскажите про четыре столпа ООП». И ты такой, с умным видом, начинаешь нести эту пиздопроебибну, которую все зазубрили, но реально мало кто в душе понимает, зачем это всё.

Ну ладно, поехали, раз уж спросили.

Инкапсуляция — это, блядь, как будто у тебя есть крутая тачка, но капот на замке. Ты не лезешь к ней с гаечным ключом в двигатель, а просто жмёшь на педаль газа и рулишь. В коде это значит: «Не лезь ко мне в переменные, чувак, используй методы, которые я для тебя приготовил». Вот смотри, чтобы не было как в том анекдоте — «зачем ты в мою private name полез? Я же геттер сделал!».

class User {
    private var name: String = "" // Спрятано нахуй, как золото в сейфе
    fun setName(name: String) { this.name = name } // Вот дверца, клади сюда
    fun getName(): String = name // А вот окошко, получай обратно
}

Наследование — это когда ты такой: «О, у соседа классная тачка! Хочу такую же, но с нитроускорителем и подогревом сидений». Берёшь его базовую модель и допиливаешь под себя. Главное, не наследуйся от чего попало, а то получится Manда с ушами.

open class Animal { fun eat() {} } // Все животные жрут
class Dog : Animal() { fun bark() {} } // А собаки ещё и гавкают, вот счастливчики

Полиморфизм — это, сука, волшебство. Одно и то же действие — разный результат. Сказал «нарисуй фигуру» — один рисует круг, другой квадрат, а третий, глядя на тебя, рисует хуй в пальто. Но интерфейс-то у них один! Система не парится, кто там что, главное — метод draw() есть.

interface Shape { fun draw() }
class Circle : Shape { override fun draw() { /* рисует круг */ } }
class Square : Shape { override fun draw() { /* рисует квадрат */ } }
// А мог бы быть класс DickInACoat : Shape { ... }

Абстракция — это, блядь, самое интересное. Это когда ты смотришь на мир и отсекаешь всё лишнее. Видишь «Тойоту», «БМВ» и трактор «Беларус». И думаешь: «Похуй на колёса и цвет, все они как-то перемещаются». Вот ты и выделил абстракцию Vehicle с методом move(). А детали — это проблемы конкретных классов.

abstract class Vehicle { abstract fun move() } // «Двигаться» — главное. А как — твои проблемы.
class Toyota : Vehicle() { override fun move() { /* жрёт бензина дохуя, но едет */ } }

Вот и вся магия, ёбанарот. Эти четыре штуки — как ноги у стула. Если одну выбросить, весь этот твой объектно-ориентированный цирк накроется медным тазом. Сидишь тогда на трёх ножках и думаешь: «И какого хуя всё разваливается?».

Видео-ответы