Перейти к содержанию

ООП

ООП (объектно-ориентированное программирование) - методология программирования, основанная на работе с классами и объектами.

Принципы

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

Инкапсуляция - это свойство, позволяющее объединять данные и методы работающие с ними в одном классе.

Тут нужно понимать, что некоторые языки отождествляют инкапсуляцию с сокрытием методов и данных для других классов (публичные и приватные поля/методы), а некоторые это разделяют.

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

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

Класс, от которого наследуются называют базовым, родительским или суперклассом. Новый класс - потомком, наследником или дочерним классом.

Полиморфизм подтипов

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

Пример на шарпах:

// Базовый класс 
public abstract class Animal
{
    public abstract String Talk(); // определяем контракт, означающий, что у класса Animal есть метод Talk.
}
// Наследуемся от Animal и делаем класс Cat, реализуем метод Talk()
public class Cat : Animal
{
    public override String Talk()
    {
        return "Мяу!";
    }
}
// Наследуемся от Animal и делаем класс Dog, реализуем метод Talk()
public class Dog : Animal
{
    public override String Talk()
    {
        return "Гав!";
    }
}

public class Program
{
    // Описываем в методе, что мы принимаем объекты класса Animal
    private static void Write(Animal animal)
    {
        // Выводим то, что возвращает метод Talk 
        Console.WriteLine(animal.Talk());
    }

    public static void Main(String args[])
    {
        /* 
        Мы можем в методе Write использовать Cat и Dog, так как 
        они унаследованы от Animal и у них есть реализованный метод Talk.
        */
        Write(new Cat()); // Мяу!
        Write(new Dog()); // Гав!
    }
}