Join Yalantis and get a $1000 sign-in bonus! React.js, React Native, Python, Java, DevOps, BА. Apply now!
×Закрыть

Ищу тренера по программированию. C#

Добрый день. Ищу специалиста в C# который сможет рассказать об ООП на примере С#. Показать какие то примеры в которых оправданно использование ООП. Я вроде бы как понимаю в чем преимущество ООП, но не понимаю как его использовать.
Я учусь на курсах С# базовый.
Вот явный пример из курсов который мне не понятен и который должен иллюстрировать преимущество абстрактных классов

abstract class AbstractClass
{
public abstract void Method();
}

class ConClass : AbstractClass
{
public override void Method()
{
Console.WriteLine("Implementation");
}
}

class Program
{
static void Main()
{
AbstractClass instance = new ConClass();

instance.Method();
}
}
Мы создали абстрактный класс, а потом класс который является его наследником и тот единственный метод что был в абстрактном классе переопределили. И нафига же мы это вообще сделали? Мы же заменили все что было в родительском классе. Сразу бы создали ConClass и получили бы тоже самое. В чем удобство то, где преимущество?
И таких примеров масса, все в группе понимают, а я нет. Чувствую себя дауном.
Так же нам задают домашние задания но не проверяют их. Я их делаю но у меня остаются сомнения. И я хотел бы что бы тренер если и не проверял бы их то хотя бы мог уточнить правильно ли я понял задания и в том ли направлении двигаюсь.

👍НравитсяПонравилось0
В избранноеВ избранном0
LinkedIn

Похожие топики

Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Представьте что вы разрабатываете шахматную игру. У вас есть Фигура, у которой есть текущая позиция и возможности ходов(набор клеток на которые она может встать). Фигурой может быть пешка, ладья, слон и тп, каждая из них ходит по своим правилам(только вперёд,только прямо или только по диагонали). Чтобы это проще описать, вы создаёте абстрактный класс Shape с абстрактным методом Move(), а для конкретного типа фигуры реализуете этот метод. Собственно, инициализируя игру вы можете создать два массива из 16 элементов типа Shape каждый, а значения заполнить конкретными реализациями фигур(2 слона, 2 коня, король и тп). Для каждой из фигур будет свой класс унаследованный от Shape. Надеюсь я привёл понятный пример)

Если в процессе преподавания ООП начинающим людям по данной теме показали только этот пример, не важно, что при этом говорили, а потом смело двинулись по програме дальше, то естественная реакция вменяемого заинтересованного человека как раз и будет

И нафига же мы это вообще сделали?

Ответ на этот вопрос дальше можно искать по-разному.
1) Самый нормальный способ — спросить у автора примера (он же преподаватель курсов, судя по топику). Пусть расширит пример хотя бы до приведенного ниже вида.
2) Если путь 1) не осуществим (ПОЧЕМУ?) — читать книжки. И опять нормальная реакция здесь — сомневаться, а правильно ли я понял, что прочитал и правильно ли применяю.

3) Поэтому нужно искать возможности задавать вопросы и получать обратную связь по поводу своих знаний. Вероятно, существуют профессионалы, которые никогда никого ни о чем не спрашивали при обучении, но такое самоограничение (не задавать вопросов) врядли является решающим условием успеха.

А может Вы все-таки даун? Сделайте одолжение отрасли — не лезьте сюда, тут и без Вас хватает...

ужас как грубо.
вместо этого ведь можно было направить человека на статью в википедии про какое-то животное (например вот эту ru.wikipedia.org/...айский_медведь и обратить внимание на следующую часть статьи
Царство: Животные
Тип: Хордовые
Класс: Млекопитающие
Отряд: Хищные
Семейство: Медвежьи

и попросить задуматься его нужны ли вообще эти царства, Типы, Классы и всё такое

и попросить задуматься его нужны ли вообще эти царства, Типы, Классы и всё такое
Те кому бы это помогло что-то прояснить, все понимают и без намеков.

ну если человек только начинает обучение — то очень просто не понять этого, если преподаватель хреновый. и то, что большинство сказали, что они это понимают — вовсе не значит, что они это понимаю. может просто не хотят выглядеть глупо

Сделайте одолжение отрасли — не лезьте сюда, тут и без Вас хватает...

Посмотрите на уровень ЗП в «отрасли» и задумайтесь почему ваше указание будет проигнорировано :)

Ну да, а вы ООП понимаете с самого рождения, впитали с молоком матери, так сказать?

А может вы не будете трололо разводить?

Почитайте Грэди Буча классический труд по объектно — ориентированному проектированию, или на худой конец любой учебник по C# потолще желательно американского автора. Там все будет описано и разжевано. И вообще, я рекомендую побольше читать книг, особенно на начальном этапе. В ИТ это вам пригодится. У меня на одной из работ кто сильно часто спрашивал к тому присматривались — почему человек спрашивает, если ему ссылку на доку дали?

Для начинающих книжка Эндрю Троелсона очень хорошая

да, согласен, она у меня даже где — то есть дома:)

Абстрактні класи і конкретні реалізації я завжди приводжу на прикладі автомобіля. У автомобіля є кермо, газ, тормоз, зчеплення, коробка передач. Це є твій інтерфейс, ти як водій нічого не знаєш про реалізацію, тому можеш при належних навиках керувати і камазом і запорожцем, хоча під капотом вони сильно відрізняються.

тренера

Это называется — «учитель». «Тренер» — это когда по дзюдо.

Что же касается теории абстрактных классов — то это сущность, отвечающая на вопрос: Что я есть. Он не может быть инстанциирован, но может может содержать определённые методы и поля/свойства. Одним словом, использовать его надо, в случае, когда наследники имеют частично общее поведение и частично общее состояние, при этом то, что описывает абстрактный класс не должно являться самодостаточным.

Это там у вас такие примеры? К чёрту эти курсы! Хотя мне на ночь глядя крутой пример тоже не придумывается. Можете рассмотреть вот такой:

public abstract class Animal
{
public int Age { get; set; }

public string Kind { get; private set; }

public abstract void Move();
public void Sleep()
{
//Все животные спят одинаково
}

}

public class Cat
{
public Cat(int age)
{
this.Age = age;
this.Kind = “Felina”;

}

public void Purring()
{
// Только кошка урчит

}

public override void Move()
{
// Кошка бегает
}

}

public class Bat
{
public Bat(int age)
{
this.Age = age;
this.Kind = “Microchiroptera”;

}

public void EmitUltrasound()
{
// Только летучая мышь испускает ультразвук

}

public override void Move()
{
// Летучая мышь летает.
}

}

class Program
{
public PassOnTheExperiences(Animal obj)
{
// Опыты на животном

}

static void Main()
{
Animal cat = new Cat(5);

Animal bat = new Bat(5);

// Вызываем у абстрактного класса перегруженный метод
cat.Move(); //Кошка побежала
bat.Move(); //Летучая мышь полетела

// Но мы не можем заставить кошку урчать, ведь используем предка Animal, который не знает про специфичные способности своего потомка.

Cat cat2 = new Cat(5);

Bat bat2 = new Bat(5);

cat2.Purring();

bat2.EmitUltrasound();

// Зато, благодаря тому, что метод принимает предка Animal, ему можно передать любого потомка.
PassOnTheExperiences(cat2);
PassOnTheExperiences(bat2);
}

}

Дуже толково пояснив...Природжений вчитель))

Борис, спасибо! Ваш пример понятен. Согласитесь мне помогать и в дальнейшем в скайпе например?

Да лучше пишите на форум) И, как советовали выше — почитайте что ни буть для новичков, рекомендую Шилдта.

Подписаться на комментарии