Объектно-ориентированное программирование (ООП) в C#. Инкапсуляция, наследование, полиморфизм #8
Vložit
- čas přidán 28. 11. 2018
- Объектно-ориентированное программирование (ООП) в языке программирования C#. Инкапсуляция, наследование, полиморфизм - Учим Шарп
На этом занятии мы рассмотрим основные парадигмы объектно-ориентированного программирования (инкапсуляция, наследование, полиморфизм, абстракция, посылка сообщений, повторное использование кода). Познакомимся с модификаторами доступа (private, protected, internal, public).
-----------
ПОДПИШИСЬ на соцсети:
🔴 TELEGRAM: bit.ly/tg_codeblog
🔴 VK: bit.ly/vk_codeblog
🔴 INSTAGRAM: bit.ly/inst_codeblog
🔴 Яндекс Дзен: bit.ly/zen_codeblog
🔴 FACEBOOK: bit.ly/fb_codeblog
🔴 TWITTER: bit.ly/twit_codeblog
🔴 Мой блог: bit.ly/site_codeblog
-----------
ПОДДЕРЖИ развитие CODE BLOG:
💲 Донат: bit.ly/donate_codeblog
💲 Спонсорство: bit.ly/patreon_codeblog
-----------
СМОТРИ мои обучающие курсы:
👉 УЧИМ ШАРП: bit.ly/cs_codeblog
👉 ПРАКТИЧЕСКИЙ ИНТЕНСИВ #1: bit.ly/fit_codeblog
👉 ПРАКТИЧЕСКИЙ ИНТЕНСИВ #2: bit.ly/crm_codeblog
👉 СТРУКТУРЫ ДАННЫХ: bit.ly/ds_codeblog
👉 АЛГОРИТМЫ СОРТИРОВКИ: bit.ly/sort_codeblog
👉 ОТВЕТЫ НА ВОПРОСЫ: bit.ly/faq_codeblog
👉 IT ПЕРЕОЗВУЧКА: bit.ly/resound_codeblog
👉 НЕЙРОННАЯ СЕТЬ: bit.ly/ai_codeblog
👉 ПАТТЕРНЫ ПРОЕКТИРОВАНИЯ: bit.ly/pattern_codeblog
👉 CODE REVIEW: bit.ly/review_codeblog
👉 CLR via C#: bit.ly/clr_codeblog
-----------
Кстати, меня зовут Шванов Вадим, и я профессиональный .NET разработчик с 2011 года и автор этого канала CODE BLOG. Я рассказываю про IT технологии и веду абсолютно бесплатный курс по языку C# с нуля. В его рамках мы рассмотрим как базовый синтаксис языка C Sharp, так и его практическое применение и специальные технологии, такие как ASP .NET, .NET Core, ASP.NET MVC, Unity, WPF, структуры данных и алгоритмы, с#, dotnet, паттерны проектирования, информатика, csharp, программное обеспечение и многое другое. Для меня важно не только показать практическое применение языка си шарп, но и объяснить основную идею и базовые понятия Computer Science. В качестве основного инструмента разработки используется Visual Studio c# и проекты на Visual c#. Если вам нравятся такие каналы как хауди хо, айти борода, Soer или ExtremeCode, то здесь вам точно понравится.
-----------
#codeblog #программирование #csharp #ityoutubersru #программист #разработка
На этом занятии мы рассмотрим основные парадигмы объектно-ориентированного программирования (инкапсуляция, наследование, полиморфизм, абстракция, посылка сообщений, повторное использование кода). Познакомимся с модификаторами доступа (private, protected, internal, public).
4:20 Что такое объектно-ориентированное программирование (ООП)
13:35 Инкапсуляция (принципы белого и черного ящика)
18:10 Наследование
22:40 Полиморфизм
28:10 Абстракция
31:35 Посылка сообщения (события)
34:20 Повторное использование кода
36:25 Практическая часть ООП в C#. Создание класса и экземпляра класса.
38:00 Модификаторы доступа public, protected, private, internal
50:00 Создание родительского класса и класса наследника
56:37 Пример полиморфизма в коде
1:03:40 Домашнее задание
Раньше я боялся ООП, думая что это чтото сложное, но сейчас я думаю, это очень полезная штука
"Person person = new Person();" - гениальный пример для новичка.
Хотя бы «Person instance = new Person()”, или еще более понятно «Person oleg = new Person()”. В свое время крайне путали такие примеры, которые были во всех видео.
@Madman u
чтобы отличать переменные от типов, то лучше добавлять myperson
тогда будет понять, но это уже произвольное имя
Вот вот, я по началу тоже не понимал что где, сплошные personы да arrayи
Шикарный канал, объяснения очень толковые, спасибо за ваш труд
Наконец-то нашел что-то годное чтобы подтянуть знания, спасибо большое.
Смотрю твои уроки по нескольку раз, чтобы вытащить с уроков по максимуму информации.
Спасибо тебе огромное за уроки, они очень помогают и очень информативные, много нового узнал и это круто, удачи тебе
Очень рад, что уроки помогают ) тебе тоже удачи :)
У доктора есть имя и фамилия, но денег у доктора нет. Хмм а программирование очень похоже на реальную жизнь...
Интересное наблюдение, соглашусь )))
@@CODEBLOG а если подписать на ивент - переехать в штаты деньги появятся?
Спасибо огромное за видео! Это самое понятное обьяснение!
Любимый блог. По несколько раз пересматриваю👍🦾
Дай Бог тебе здоровья, Человек
Спасибо )
Просто супер!
спасибо большое, давно не мог понят ооп но у тебя понял. Ты отлично объясняешь
Круто конечно, спасибо за твой труд
Спасибо вам большое. Учила Шарп сначала по SoloLearn, но там максимально скудно объясняют что к чему, и на сложных вещах начинаешь просто тонуть. А вот вы нереально понятно всё объясняете! Даже если это сложно, оно всё-равно понятно благодаря вам. Ещё раз спасибо :)
Вы учили язык через телефонное приложение?)
Как успехи?
Спасибо за видео!
Спасибо за уроки)) ;)
Спасибо за уроки )
Всегда пожалуйста )
CODE BLOG SUPER GOOD
1:01:04 немного стало ясно с этим полиморфизмом. Просто при объяснение складывается впечатление, что приводится к базовому классу тот же самый объект, а получается, что другой экземпляр объекта базового класса берёт данные наследника. Это что-то типа изменение указателей в си. Данные остались, но указатели меняются и соответственно меняется работа с этими указателями
спасибо
13:48 только через год изучения программирования я нашёл точное определение инкапсуляции. Оказалось инкапсуляция это не сокрытие, а это механизм, которые объединяет данные и методы, которые работают с этими данными, в единый компонент, а также механизм обеспечивающий сокрытие этих данных. То есть инкапсуляция это не сокрытие. Инкапсуляция обеспечивает сокрытие
уроки супер! подсел конкретно )))
Очень рад, что нравится )
@@CODEBLOG Все ЗБС, вот только не идеально, к сожалению. А вот... а-а-а... если бы .. А-а-а... убрать вот.... а-а-а-а.... пздц просто вымораживает. И не надо гнать, что мол - "уроки бесплатно и что вы хотели". Тут есть реклама и за неё человек получает деньги. Если есть реклама своего продукта, то это тоже какая - никакая прибыль. И про это я ничего не говорю - каждый зарабатывает как может, но прошу Вас - избавьтесь от этой привычки и избавьте зрителей от кровавых ушей. Лучше просто молча подумать секунды две каждые пять десять секунд, чем "акать". Вы сами-то попробуйте посмотреть свое видео на х1,5 или х2,0. Еще раз повторюсь - это не хейт и не начало холивара, ......а-а-а-а-а..... просто маленькая ....а-а-а-а-а... просьба.
Спасибо) все очень доступно и понятно
Всегда пожалуйста )
Интересно что там тебе понятно? В этом видео самые вершки, без углублений.
@@Kitsikoo он же написал, что ВСЁ понятно
52:10 Символично.
"Но при этом, как видите, денег у доктора нет"
Я хотел это написать😂. Типо сейчас пандемия, и у доктаров денег нет( Because, Putin bad human
Особенно на фоне коронавируса и не выплат врачам...
у автора Большой Талант преподавателя.
Скорее не талант, а способность
На 5:03 автор говорит: "сейчас, секундочку, кое-что поправлю" и сразу после этого идёт реклама))) совпадение?
ютуб сам выбирает момент, когда лучше ставить рекламу, видимо так совпало
есть же блокировщики рекламыи и нет проблем
@@vladsol5575 да я по угару это написал, шутка, смеяться надо, ха ха делать надо. Я даже смайлик ) поставил. Все забейте все хер, не зашла шутка и ладно, я сам виноват: знал же я что пишу шутки программистам а значит надо было объявить переменную типа "шутка".
joker reclam = "текст шутки"🤣🤣🤣
@@user-iw2zv9bp4o ))
Полиморфизм еще можно привести на коробке передач, ручная и автоматическая, они обе коробки (взаимодействие человека с ними примерно одинаковое), но внутри реализация их разная. Т.е. они могут наследовать один и тот же материал, или размер коробки, но остальные параметры различны, но все равно они остаются коробками)
Так это наследование. Есть объект коробка и есть наследники механическая коробка и автомат. А полиморфизм это что? Что автомат можно рассмотреть как коробку, то есть привести к коробке? Использовать как коробку? Не понятно что
на скорости 1.5 идеально смотреть,а так спасибо
Всегда пожалуйста )
когда знакомые вещи, то можно и х2 )
@@IIeJIbMeHb007 ага. я на х2 смотрю
@@lazymaths4749 Круто, давайте ВСЕ будем писать на какой скорости мы смотрим это же тааааак интересно...
@@cliobro3890 давайте! :)
По какой причине наследуемый класс у меня не наследует базовый. Красная черточка под наследуемым классом. В ошибке пишет что доступность базового класса ниже доступности класса наследуемого. В чем моя ошибка ?
У вас тоже после его слов "- минуту, я сейчас что-то поправлю" включается реклама, ай красава, молодец :)
Это само ) CZcams проставляет рекламные вставки автоматом )
Откинуть у бухгалтера все бухгалтерское и превратить его в человека.)
тоже самое можно сказать про любого человека
Можно использовать короткую запись для назначения свойств Doctor doctor = new Doctor {FirstName = "Roman", LastName = "Sidorov", specialty = "Surgeon"};
Спасибо Бро. Только ты смог мне объяснить что такое полиморфизм. Теперь меня уже не чем не удивишь ))) Готовлюсь к собеседованию. Хочу постепенно отказаться от фриланса в пользу работы в компании. И твои уроки как нельзя кстати. Алгоритмы есть в планах?
Сегодня начинаем структуры данных, а за ними алгоритмы
Я удивлю. нИчем пишется слитно.
@@Kitsikoo
ds05.infourok.ru/uploads/ex/0985/00006b2c-4281f29d/8/hello_html_m74906498.png
Не за что
Как успехи?
палец вверх за видео от СЕООНЛИ
А принципы Solid-парадигмы ООП?и стоит ли про них рассказать,если на собеседовании спросят по ООП?
Скорее всего спросят. Про solid сейчас часто спрашивают даже на джуновых позициях, а на мидла 100%. при этом рекомендую обратить внимание именно на DI и single responsibility, именно на них обычно заостряют внимание
большое спасибо за уроки! у меня вопрос: если си шарп-это язык, построенный по принципу черного ящика почему на собеседованиях так часто спрашивают что под капотом у определенной функции?
Потому что это просто показатель того, насколько ты интересуешься тонкостями языка, а значит хочешь разбираться больше остальных и скорее всего будет неплохо работать )
в смысле "что под капотом" ?
что реализует та или иная функция (метод) что ли? это спрашивают? )
Потому что это будет показывать твой уровень. Или блондинка которая села за руль и поехала или специалист водитель которые может использовать возможности автомобиля
почему-то в комментах нет ни одной домашки. Куда все делись ? На прошлом уроке домашек много.
как работает апкаст то понятно, только для чего он используется? почему не работать без него ? кто может объяснить
Это необходимо для полиморфизма и работе через базовые классы и интерфейсы. в ближайшем практическом интенсиве покажу это, потому что вопрос очень частый
"Денег. У доктора. Нет.".. - прям как в жизни
codeblog: я щас кое-что поправлю...
*Вылазит реклама...*
Если что, я не специально ) так совпало )
@@CODEBLOG ниче не знаю
@@CODEBLOG а вообще спасибо за годные уроки)
Хах у меня так же или это у всех так
@@alkelov у всех, но это прикольно.
58:02 "После этого мы можем привести обратно, т.е. мы можем сделать "вотакот" (здравствуй, Невский). А как это сформулировать грамотным языком? Что мы делаем? Т.е. что мы хотим сделать? Нужно для конспекта.
Как результат звучит так, наверное: Невозможно неявное преобразование переменной типа *Person* в переменную типа *Doctor* указанным образом. Но для чего мы это делали? Что хотели этим показать?
И еще. Там в подсказке помощника написано: "Не удается неявно преобразовать тип..."
Хотя такая запись:
Person p = d;
Doctor dd = p;
это же не преобразование, а неявное приведение. Преобразование это использование *Convert* .
Что это "трудности перевода" или я не понял, что такое "преобразование" и что такое "приведение".
Спасибо.
Я здесь не упомянул, но есть правильные наименования данных приведений. Восходящие преобразование или Upcast, когда мы может преобразовывать потомка к предку, может выполняться с помощью неявного приведения. Нисходящие преобразование или Downcast - корректное преобразование предка к потомку возможно при двух условиях, используется синтаксис явного приведения типов и переменная родительского типа за счет полиморфизма содержит фактический тип, к которому выполняется приведение
49:11 Зачем нужен тип decimal в Money ?
У обычных чисел с плавающей запятой есть такое понятие, как ошибка округления. Это связано с тем, как они хранятся в памяти (порядок и мантиса, загугли, почитай, если интересно) А так как деньги, это такая вещь, которая должна быть точно, то используется число с фиксированной запятой
@@CODEBLOG Спасибо ещё раз , вы меня часто выручаете
28:23 если инкапсуляцию и наследование можно выделить в отдельное правило, то полиморфизм является не отдельным правилом, а следствием правила наследования
Толково
Спасибо )
Икапсуляция и Наследование понял, а дальше грустно
Под полтарашку заходит огонь, это про скорость
На 2 даже лучше )
@@CODEBLOG сильно быстро, не улавливаешь суть
32:57 намёк понял))
Депутат != человек
Как создать клас на Маке?
без код-конвеншена глаза режет, но в целом отличный урок)
Ну да, согласен )
22/03/21 смотрим
у меня нет сборки персон написано сделать ничего не могу и написано инструкции верхнего уровня недоступен в C# 7.3
я все списал точь в точь проверил каждую точку но везде ошибки
Я хочу делать игры но без понимания этого их не будет
Будет. Найдите другие каналы
а зачем нам нужен Upcast доктора к человеку, если доктор и так наследует поля человека??
если мы, например, хотим создать массив людей
30:31 ржал пол часа
Суть урока: Мы создали Романа!
34:55 - рантайм еррор
Person p = d; И говорит что у 'p' пропала специализация :D Её там никогда и не было, алё :D
25:40 Сказ о том, как из бухгалтера стать человеком)))
Одному мне кажется, что все это ООП - бредни, которые придумал обкумаренный прогер? Я скорее всего нифига не понял, но, как мне кажется, всё это можно сделать в любом ЯП+БД без всей этой галиматьи. Уже третье видео смотрю, где пытаются объяснить что такое ООП. Одна вода изотерическая. :) Жалко лектора. Ему тоже не легко это рассказывать))). Спасибо за видео.
Есть такое мнение и оно не только у тебя. но со временем к ООП просто привыкаешь и начинает казаться вполне логичным. По сути, ооп - это просто контроль сложности. Разделение на отдельные логически-связанные сущности, выстраивание иерерхий, уменьшение дублирования кода и т.д. Это способ сделать действительно большие и сложные проекты из тысяч файлов более понятными
Привет с 2021
После того как на собеседовании сказал, что инкапсуляция - это сокрытие данных, мне дали понять что это не так... По их мнению. Я так понимаю что однозначного ответа просто не существует. Одни опытные программисты говорят сокрытие, другие не сокрытие.
Фраза "сокрытие данных" не объясняет в полной степени понятие инкапсуляции. Основная черта инкапсуляции заключается в том, что у компонента могут (и, скорее всего, будут) присутствовать данные и функии, присущие только ему одному. "Сокрытие" тут является следствием. Одна лишь фраза "сокрытие данных" без остального контекста - это, скорее, про ситуацию, когда ты строчку кода закомментил :)
@@dmitriichurikov501 это точно...
27:09 непонятно зачем из врача обратно делать человека, если он и так человек, так как наследуется от человека и имеет все свойства и методы человека. Тут или пример надо какой-то другой или помимо примера ещё указывать причину этого действия
С конкретными примерами стало ясно.
Аааааа, сложно(
Надеюсь до меня со временем дойдёт...
Ну как, дошло?
Ну как, дошло?
Ну как, дошло?
пока стоит
Блин, готовиться нужно. Чтоб не млеть, а говорить по делу. Конкретно из этого видео можно вычленить полезности на 20 минут. Остальное "ээээ", повторы и тд.
Да подготовка у автора хромает, но это не видео с информацией, а стрим лекция
Сложно на примере всяких человеков и докторов, точнее более чем понятно, разобрано по косточкам в сотнях книг. Как понять на примере программы? Возьмем любую с потолка, например Total Commander, или Chrome, или Телеграм с Вайбером, что там является классом, что объектом, как реализовано наследование, полиморфизм и прочие фишки? Примеров ООП на докторах и строителях миллион, и ни одного на примере реального приложения. Иначе - это сферическое ООП в вакууме.
На практике, как понимаю, нет чётких границ между правилами, а где-то они и нарушаются, поэтому для понимания подойдут и такие примеры
А где шесть парадигм то?
Инкапсуляция, наследование, полиморфизм, абстракция, посылка сообщений, повторное использование кода
ООП до методов? O_o
Сначала нужно рассмотреть саму парадигму ООП, а потом уже концентрироваться на деталях )
@@CODEBLOG так ведь методы это функциональное программирование :)
Их можно было для простоты понимания пройти вначале, не забивая голову ООП)
Ну да ладно, дело хозяйское :)
Наследование уже подразумевает повторное использование кода, зачем его выводить в отдельную парадигму?
И насчёт Подписки на событие тоже не совсем понятно. Это больше похоже на один из способов конструирования системы(взаимодействие разных "модулей/сервисов"), но не на парадигму ООП.
Объясни поподробнее.
Привет. Давай по порядку. Повторное использование - это не только про наследование. Это еще может быть и использование целых библиотек, фреймворков и т.д. По сути это тот же DRY - Не пиши еще раз то, что уже было написано. Плюс пиши код так, чтобы его можно было повторно использовать.
По поводу посылки сообщения действительно такое, поэтому я и сказал, что эти две парадигрмы далеко не сильно в ходу ) наследование тоже можно представить как способ конструирования системы. Подразумевается использование событий и обработчиков событий. Если подписан на событие - всегда должен быть обработчик
Подписка используется для оптимизации в играх. Когда не нужно создавать экземпляры класса, чтобы следить за изменениями этого класса, а делается подписка на события и тогда при получении события идёт обработка его
Это не функциональное программирование, в процедурное. Функциональное это про карринг, лямбда-исчисление, чистота функции, etc. примеры яп: lisp, haskell
Инкапсуляция связывает методы с данными. И она лишь ОБЕСПЕЧИВАЕТ сокрытие, а не является им
В объектно-ориентированном языке как C# инкапсуляция - это именно сокрытие, потому что связывание и так подразумевается по умолчанию. Даже в главнейшей книге любого .net-разработчика CLR via C# Джеффри Рихтер писал, что инкапсуляция - это сокрытие. В "правильном" ООП (привет, ExtremeCode) действительно это связывание + сокрытие, но здесь сокрытие есть по умолчанию )
и на словах " денег у доктора нет" где-то всплакнул один доктор)) но зря get и set не затронули у многих наверное из-за этого вопрос а на кой хер тогда privat.
Слишком длинные видео. Было бы лучше если бы темы разделялись и на каждую тему делали отдельные короткие видео(10-20 минут)..
Во-1, это не видео, а записи стримов, то есть лекций автора для аудитории. Даже в этом случае автор пытается разделить такой большой стрим на две части: теорию и практику.
Во-2, судя по сообщениям из других стримов, автор планировал в будущем нарезать из этих записей короткие видео, по типу как вы предлагаете. Но походу как автор переехал он забросил этот канал
22:47 и у автора тоже
Правильно я понимаю, что полиморфизм - это приведение дочернего класса к родительскому?
И не только ,но и в переопределении методов родительского класса
единственное что бесит, это вот эта эээ после каждого слова
Принцип dry преполагает создание отдельных методов вместо участков одинакового кода. Не более.
сколько рекламы в видео напихал
почему я вот смотрю уже 8-й урок и ничего не понимаю?
Что-то понял?Как успехи,начал кодить,я вот уже си шарпом занимаюсь пол года до сих пор нечего непонимаю,но я не сдаюсь у меня все потихоньку выходит у меня проблема с циклами не сдавайсь вместе со мной)
Практикуйся больше. Голая теория в голову вообще не входит
@@endi9204 ты за полгода только до циклов дошел?
@@darman5820 Я просто постоянно меняю ресурсы для обучения,решил уже плотно на одном остановится,но все равно как-то плохо с программированием
@@endi9204 это как-то совсем плохо. Я тебе бы порекомендовал курс скиллбокс в интернете слитый скачать, там видеокурсы и задания в конце каждой темы
Дизлайки ставит Роман Сакутин
Кто это и почему именно он? ))
У данного человека (он ютубер если что и программирует на C#) есть одна плохая черта ругать разные источники, обучающие языку C# под предлогом "Все дураки, покупайте мой курс"
Да шо ж нихрена не понятно(
Всё конечно хорошо, но эээ через каждые 2 слова...
Есть такой косяк ) но я стараюсь отучить себя от этого )
В какой момент доктор стал человеком? Нихера не понятно.
В момент передачи доктора в параметры или присвоении переменной тип человек
слушать невозможно это заунывное повествование(( Затошнило
Капец, реклама через каждые 2 минуты!!! Смотреть не возможно!
+
Ох ребятки. При всём моём уважении, НО:
Инкапсуляция - это не только лишь сокрытие, тезис шире этой возможности.
Наследование - пример кастыльный, но верный.
Полиморфизм - это разные сигнатуры и/или разные реализации одноимённых методов родственных классов. Это не упкаст и давнкаст как таковые, хоть именно в этих процессах полиморфизм неофитам начинает взрывать мозги.
По мне ваше объяснение взрывает мозг больше, чем объяснение стримера. Можно простыми словами?
Отвратительное объяснение что такое ООП, преподаватель просто бэкает своими словами, пытаясь свои мысли собрать во что то связное. Конечно для людей кто уже знаком с ООП, этот бессвязный текст понятен, но если это будет смотреть новичек, то он просто плюнет на затею изучать языки, думая что он слишком глуп, но почти всегда проблема понимания и не понимания предмета кроется в преподавателе, который не преподаватель, но может хороший ремесленник, а это разные вещи. И боги как же достали эти одни и те же примеры у всех ютюберов с периметрами и классами Person, неужели нельзя придумать свой пример.
Вот я дошёл до этого урока и не черта непонятно)
Как успехи? Как новичок могу сказать, что желания бросить нет, а есть вот это "ничего не понятно, но пойдём дальше". С теорией у автора слабовато или с пониманием теории, потому что если человек не может понятно пересказать, то это он недоконца понимает предмет
аааа... ээээ...