Найти в Дзене
Заметки БыдлоКодера

C# ООП Полиморфизм - Ахилесовая пята

Всем привет. Решил написать цикл статей по ООП, т.к принципы и уж тем более, реализация ООП на листе бумаги - ахиллесова пята многих программистов, да, даже опытные программисты не все могут объяснить, что такое ООП и как его реализовать. Что такое ООП? ООП - это Объектно-Ориентированное Программирование. Принцип написание программ основывающихся на объектах, а не на функциях/методах/процедурах. Объект - реализация класса. Все реализации одного класса похожи друг на друга, но могут иметь разные параметры и значения. Объекты могут задействовать функции/процедуры/методы, принадлежащие только для них. ООП сильно упрощает(или нет?) процесс создания структуры программы. И так, полиморфизм - что за зверь? А это довольно простой зверь и по моей памяти, многие приводят пример с кошками(азиатские, европейские и т.д), собаками(бульдоги, немецкие овчарки и т.д), так же популярный пример в книге М.Е. Фленова Библия Delphi. В моем случае будем использовать пример людьми. Есть Объект человек,
Оглавление

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

Что такое ООП?

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

ООП сильно упрощает(или нет?) процесс создания структуры программы.

И так, полиморфизм - что за зверь?

А это довольно простой зверь и по моей памяти, многие приводят пример с кошками(азиатские, европейские и т.д), собаками(бульдоги, немецкие овчарки и т.д), так же популярный пример в книге М.Е. Фленова Библия Delphi.

В моем случае будем использовать пример людьми. Есть Объект человек, людей мы можем разделять по цвету кожи, национальности.

И так, создадим класс, Human.

class Human
{
public virtual void AboutHuman()
{
Console.WriteLine("My Name: null");
Console.WriteLine("I'm old: null");
Console.WriteLine("And I'm not have Home");
}
}
Class Human
Class Human

У него имеется метод AboutHuman(), это виртуальный метод, который мы потом сможем с помощью override переопределить в производных классах. Что такое virtual, override, new или статья как гуглить.

Отлично, теперь создаем классы Asian, Eu, Mars и все они наследуются от класса Human.

class Asian : Human
{
public override void AboutHuman()
{
Console.WriteLine("My Name: Chun So Yon ");
Console.WriteLine("I'm old: 22 years");
Console.WriteLine("I'm from China");
}
}
class Eu : Human
{
public override void AboutHuman()
{
Console.WriteLine("My Name: Tille");
Console.WriteLine("I'm old: 45 years");
Console.WriteLine("I'm from Germany");
}
}
class Mars : Human
{
public override void AboutHuman()
{
Console.WriteLine("My Name: Natasha");
Console.WriteLine("I'm old: 32 years");
Console.WriteLine("I'm from Mars");
}
}
Class Asia,Eu,Mars
Class Asia,Eu,Mars

У всех классов имеется метод AboutHuman(), которые несут свою информацию о человеке.

Отлично, теперь вызываем.

Вызов
Вызов

После того, как мы вызвали все наши методы, мы получаем каждый раз новый ответ, в конце мы получаем ответ, что у человека нет имени, нет возраста и нет дома, отлично.

И так, все довольно простенько, но на собеседовании могут спросить, а для чего все это? Зачем требуется полиморфизм, где его можно применить?

Отличный вопрос, на самом деле спектр применения широк, c'mon без этого не возможен ООП. Для многих абстрактные кошки, собаки и машины сложны в понимании, а уж тем более реализация в редакторе.

Представим игру League of Legends, Dota 2 и им подобные, игра в которой есть две команды, которые сражаются друг с другом. Нам нужно в каждую команду отправить персонажей, которых выбрали игроки, и как же нам это сделать? Отличный пример вот тут

На самом деле понять Полиморфизм и использовать его при создании программ не так сложно, как кажется, главное уйти, именно уйти от метода программирования процедурами/методами/функциями.

Финиш

Ну вот и все :)

И помните! Лайк + подписка, мотивируют лучше чем найденная ";"

-4