Абстрактный класс в ООП

  Рет қаралды 40,081

Volodya Mozhenkov

Volodya Mozhenkov

8 жыл бұрын

Вы не можете создать объекты абстрактного класса. И когда вы впервые это слышите, может быть не совсем ясно, зачем-же вообщетакой класс нам может понадобиться.
К счастью понять это весьма несложно, и вы разберётесь в этом посмотрев это видео.

Пікірлер: 69
@victor-zz6xn
@victor-zz6xn 4 жыл бұрын
не думал, что когда-нибудь буду смотреть уроки в Иисуса, уроки чёткие. спасибо!
@RS-nj2dv
@RS-nj2dv 4 жыл бұрын
Хиппи-программист
@user-ug8qc6tr6b
@user-ug8qc6tr6b 8 жыл бұрын
Владимир, спасибо вам большое за эту замечательную передачу! Смотрю по вечерам после работы, вы для меня как Малахов для русских бабушек
@user-kr7hf8bo2l
@user-kr7hf8bo2l 2 жыл бұрын
мне 50 и я смотрю по вечерам Владимира, не надо обобщать за русских бабушек))
@Ogilouk
@Ogilouk Жыл бұрын
@@user-kr7hf8bo2l ещё не бабушка)
@JSvift
@JSvift 4 ай бұрын
Спасибо, действительно очень доходчиво.
@ziyadseykhanov3967
@ziyadseykhanov3967 5 жыл бұрын
Все просто и на человеческом. Спасибо большущие вам за вашу работу. Не как не мог вникнуть но после видео про Ранее и Позднее и этот ролик все стало на свои места !!!
@pavelsewerow1448
@pavelsewerow1448 8 жыл бұрын
Очень хорошее объяснение. Особенно учитывая что я работал на мебельном производстве, и данный пример, просто лучший способ объяснить мне абстрактный класс. Спасибо за урок!
@coreytaylor3418
@coreytaylor3418 6 жыл бұрын
Спасибо за доходчивое объяснение, даже такой чайник как я понял. Лайк и подписку оформил)))
@user-ek9ez7ho6f
@user-ek9ez7ho6f 4 жыл бұрын
Обнимаю крепко крепко и благодарю от всей души!
@constantinekhvalin6038
@constantinekhvalin6038 8 жыл бұрын
Володя, спасибо за видео! было бы здорово узнать ваше мнение по поводу того, когда лучше использовать класс, а когда интерфейс.
@user-bs6ey5iu2t
@user-bs6ey5iu2t 2 жыл бұрын
Огромное человеческое спасибо! Видео реально разложило по полкам в моем мозгу многие вещи!. А я не мог понять, почему, заходя в родительский класс я вижу кучу пустых методов…
@MartinXProject
@MartinXProject Жыл бұрын
Идеальная подача, спасибо за актуальную тему
@darul-asar381
@darul-asar381 2 жыл бұрын
Посмотрев первый раз, я ничего не понял, пошёл посмотрел другой урок, где наглядно показывают абстрактный класс, вернулся сюда и все абсолютно стало понятно) благодарю за урок.
@yarobest9594
@yarobest9594 4 жыл бұрын
гибридное программирование с примесью кириллицы - огонь :D
@404Negative
@404Negative 5 жыл бұрын
2:22 на этом моменте у моего мозга переполнился стек вызовов и мозг ушёл в BSOD
@koala3382
@koala3382 Жыл бұрын
Очень хорошо и понятно обьяснили, спасибо вам большое
@user-bw9eu4ln1i
@user-bw9eu4ln1i 2 жыл бұрын
Проходил курсы в интернете от одного из спикеров, рассказывалось вкратце как создать. Владимир, ты рассказал мега подробно и понятно, чего не хватало в моем курсею Спасибо! Продолжай!)
@user-bw9eu4ln1i
@user-bw9eu4ln1i 2 жыл бұрын
Лайк + подписка + уведомления)
@JaanPajusalu
@JaanPajusalu 7 жыл бұрын
Опс вот это прикольное "подавание" материала ! спс
@TIENTI0000
@TIENTI0000 2 жыл бұрын
харисматично объясняет, лучше других подобных видео
@baron2272
@baron2272 7 ай бұрын
Расскажите об абстрактных классах при реализации views в MVC проектах. Желателен конкретный пример. Спасибо.
@alekseyveld7559
@alekseyveld7559 2 жыл бұрын
Спасибо!
@serious6037
@serious6037 2 жыл бұрын
огромное спасибо.
@prosto_komputer
@prosto_komputer 2 жыл бұрын
Пример с мебелью супер!
@mightyv726
@mightyv726 7 жыл бұрын
Спасибо, Бро, очень доходчиво , очень живая подача!
@user-kv5ze5qc2b
@user-kv5ze5qc2b 3 жыл бұрын
Спасибо.
@user-kj8yk8it6d
@user-kj8yk8it6d 3 жыл бұрын
Просто спасибо
@TIENTI0000
@TIENTI0000 2 жыл бұрын
про мебель гениальный пример
@FrenkyDev
@FrenkyDev 8 жыл бұрын
Супер!Лайк і підписка!
@SashaGalashka
@SashaGalashka 6 ай бұрын
Спасибо
@russia_who_am_I
@russia_who_am_I 8 жыл бұрын
Володя, а можете рассказать про метаклассы, которые есть в C++ Builder, Delphi. Как их использовать ?
@maxlich9139
@maxlich9139 6 жыл бұрын
хм, билдер ещё жив?!
@yaroslavkozlov569
@yaroslavkozlov569 3 жыл бұрын
@@maxlich9139 Неа. Некроманты, мать их ;)
@maxlich9139
@maxlich9139 6 жыл бұрын
В Джаве для этого есть удобное ключевое abstract. Как по мне, это более читабельно, чем =0 в конце метода. Этим словом нужно помечать и сам абстрактный, а абстрактный метод, который он содержится. Несколько неудобно, конечно, что нужно это слово писать и там, и там, чтобы иметь в классе абстрактные методы, но что есть, то есть; плюс это опять-таки повышает читабельность кода.
@EvgenichTalagaev
@EvgenichTalagaev 8 ай бұрын
Спасибо большое, понятно и доступно. Кстати, ваш сайт не работает, хотел зайти, посмотреть переводы статей.
@dimakovalenkov7835
@dimakovalenkov7835 3 жыл бұрын
спасибо
@bennails3447
@bennails3447 4 жыл бұрын
👍
@nordmilk
@nordmilk Жыл бұрын
агонь
@user-nk8db9bb5k
@user-nk8db9bb5k 8 жыл бұрын
Володя, а если нет необходимости переопределять методы, а просто нужно добавить поля у наследникой. К примеру, у мебели может быть "вес" и "материал", а у стула "тип сидушки".
@user-nk8db9bb5k
@user-nk8db9bb5k 8 жыл бұрын
*наследников
@VladimirMozhenkov
@VladimirMozhenkov 8 жыл бұрын
Алексей Словягин Это простое наследование, в нём вы всегда можете добавлять дополнительные поля. При наследовании от абстрактного класса поля можно добавлять если нужно, а можно оставить как есть. Учтите, что на многих языках поля делают приватными/защищёнными, так что вам всё равно придётся создавать методы доступа.
@fodcsafafgsdg
@fodcsafafgsdg 5 жыл бұрын
Я в восторге. Правда. Да, сильно разжевано. Но больше не нужно ничего читать или смотреть по данной теме. Аплодирую
@TheNimmortal
@TheNimmortal 8 жыл бұрын
Если брать описанный вами пример, то это больше понятие интерфейса. Абстрактный класс как таковой, все же имеет при себе реализацию каких-то методов, которые используются либо вызываются и перекрываются.
@VladimirMozhenkov
@VladimirMozhenkov 8 жыл бұрын
TheNimmortal Про интерфейс видео скоро тоже будет. У интерфейса не может быть данных. У абстрактного класса могут быть какие-то реализованые методы, но это не обязательно. В некоторых языках есть разница между интерфейсом и абстрактным классом без методов и данных. Java например.
@TheNimmortal
@TheNimmortal 8 жыл бұрын
Да, просто мой профиль как раз таки Java. Это автоматически вышло =) Просто если брать С++, то из-за отсутствия на уровне языка интерфейсов - проблема. Банальный пример - ромбовидное наследование("даймонд").
@VladimirMozhenkov
@VladimirMozhenkov 8 жыл бұрын
TheNimmortal Вот кстати и Интерфейс выложил: kzfaq.info/get/bejne/ma1zf6eK1q6bgKs.html
@khurshidddbek
@khurshidddbek 3 жыл бұрын
Теперь я понимаю.
@battalov_u
@battalov_u 4 жыл бұрын
9:40 "хочет человек сделать". Допустим у меня сайт по сборке мебели, онлайн (сборка виртуальных макетов) и пользователь решил собрать себе макет шкафа, а это значит он создаст класс "шкаф" у которого будет родительский класс "мебель" который создан мною со своими методами. Я правильно понял?
@user-yg4ih9jp9i
@user-yg4ih9jp9i 7 жыл бұрын
можно ли связать абстрактный класс и форму?
@Roman-ms5fw
@Roman-ms5fw 7 жыл бұрын
Думаю уже поздно,нет нельзя. У абстрактного класса не существует объекты которые можно передать в головную функцию (int main) Но от абстрактного класса идут наследники мебель и стул ,если модификатор доступа в них public , то объекты дочернего класса могут существовать в int main.
@goodevening2144
@goodevening2144 Жыл бұрын
Для пишущих на питоне: 1. Чтобы класс являлся абстрактным, он должен наследовать специальный класc ABC (из пакета "abc") и содержать хотя бы один абстрактный метод (декоратор @abstractmethod - также подключается из пакета "abc"). Это два условия. 2. Абстрактный класс можно только наследовать из другого класса, его нельзя присвоить объекту, как другие классы. MyClass(MyAbstractClass): # ОК. MyClass наследует MyAbstractClass. Всё в порядке. my_obj = MyAbstractClass() # не ОК! my_obj не может быть экземпляром абстрактного класса MyAbstractClass. Так нельзя. 3. Все методы определённые в абстрактном классе, как абстрактные методы (декоратор @abstractmethod) обязательно должны быть определены в его дочерних классах. Обязательно! 4. Абстрактный класс может содержать другие методы, а не только методы помеченные как @abstractmethod. Пример: # Обязательно подключаем from abc import ABC, abstractmethod # Описываем абстрактный класс. Наследует спец класс "ABC" и имеет методы @abstractmethod class MyAbstractClass(ABC): @abstractmethod def must_have_first(self): print("must_have_first from MyAbstractClass") @abstractmethod def must_have_second(self): print("must_have_second from MyAbstractClass") def say_hello(): print("Hello from MyAbstractClass") #my_obj = MyAbstractClass() # Нельзя! Только наследовать! # Это обычный класс наследующий абстрактный класс. class MyClass(MyAbstractClass): # Обязаны переопределить этот метод - у абстрактного класса он есть! def must_have_first(self): print('must_have_first from MyClass') # Обязаны переопределить этот метод - у абстрактного класса он есть! def must_have_second(self): print('must_have_second from MyClass') def say_hi(self): print("Say hi from MyClass") # Пробуем my_obj = MyClass() my_obj.must_have_first() my_obj.must_have_second() my_obj.say_hi() MyAbstractClass.say_hello() Выведет: must_have_first from MyClass must_have_second from MyClass Say hi from MyClass Hello from MyAbstractClass Экспериментируйте.
@gordonfreeman1842
@gordonfreeman1842 5 жыл бұрын
Ну самое-то очевидное и не сказали - абстрактный класс нужен прежде всего для того, чтобы избежать дублирования кода.
@mtvspec
@mtvspec 2 жыл бұрын
Можно подробнее, каким образом абстрактный класс помогает избежать дублирование кода?
@user-md5yb8hz4h
@user-md5yb8hz4h 7 жыл бұрын
что такое почти университет?
@user-yd9xy3rb4x
@user-yd9xy3rb4x 2 жыл бұрын
Why should we use abstract classes if we have protocols? I'm an iOS developer.
@Ivan-qb7kc
@Ivan-qb7kc 6 жыл бұрын
Не говорите только про C++. Рассазывайте про все языки!
@user-db2th5em3v
@user-db2th5em3v 7 жыл бұрын
Я все равно не понял, зачем нужен абстрактные класс и методы. Методы классов выполняют какую-то полезную работу - создают стул, стол. Методы абстрактного класса - просто родители не создающие ничего. Насколько я понимаю, в этом есть какая-то польза? Какая?
@maxlich9139
@maxlich9139 6 жыл бұрын
Как мне кажется, это позволяет реализовать в языке такой принцип ООП, как абстракция. То есть идёт работа с абстрактыми понятиями. По сути, это некоторое обобщение. Вообще, абстрактный класс можно понимать как некую категорию. Поэтому в функции может ожидаться объект, принадлежащий какой-то категории (это удобно, когда реализация неважна, и когда все объекты этой категории обладают какие-то важными общими свойствами или обладают каким-то важным общим поведением; например в игре можно объявить абстрактный класс "активный объект", который может допустим ходить, атаковать, иметь хп и урон, а потом уже унаследовать от него класс игрока и классы его противников; это довольно удобная абстрактизация)
@user-cf5sd6sy7g
@user-cf5sd6sy7g 6 жыл бұрын
Дам пример для всех, кто не понимает зачем декларировать пустую функцию. Допустим, у вас есть класс A. Вы наследуете от него класс B и создаете в нём функцию foo(). Затем на указатель на обьект типа A выделяете функцию B (например, еслив программе таблица хранит элементы A и B в одном массиве) A* obj = new B; Теперь программа будет работать с объектом B как с объектом A: вызываем obj.foo() - ошибка, класс A не содержит функцию foo. Придется использовать приведение типов с помощью dynamic_cast. А можно просто в классе A объявить пустую виртуальную функцию, теперь компилятор знает, что она есть, но при этом она не занимает память. Теперь obj.foo() вызывает foo() класса B.
@watchsee1812
@watchsee1812 5 жыл бұрын
Для того чтоб классы наследники обязательно реализовали все методы и свойства абстрактного класса. Это Ася кухня для того чтоб когда кодят несколько гигов одновременно главный чувак задаёт правила для других которые реализуют дочерним классы.
@sergeyab9468
@sergeyab9468 5 жыл бұрын
Посмотрел в первый раз ничего не понял. Посмотрел через год программирования, хоть и функциональщиной - понял
@bittertruth2620
@bittertruth2620 2 жыл бұрын
2:23 нет, никогда не видел. У меня был следующий случай в жизни. Я дал грузчикам ключи от квартиры, в которой стояли столы и стулья, и попросил их вынести всю мебель из неё. А когда грузчики закончили свою работу, я обнаружил, что в квартире больше нет ни столов, ни стульев. Вопрос: как грузчики поняли, что нужно вынести столы и стулья из квартиры, хотя я им об этом не говорил?
@mikail301
@mikail301 2 жыл бұрын
Тот кто знает что такое наследование, тому очень типа нужны абстрактные классы. а почему не унаследоваться от обычного класса? зачем абсирактный тогда? просто обычный класс написал и от него наследуйся.
@goodevening2144
@goodevening2144 Жыл бұрын
Да, но в таком случае, класс "B", который наследует обычный класс "A" не будет обязан переопределять абстрактные методы класса "A". Если класс "А" абстрактный (с абстрактными методами), то он заставляет иметь методы (помеченные у него как абстрактные) в наследующих его классах. Смысл в том, что Вы написали очень полезный класс (абстрактный) и его должны наследовать другие классы, но в нём есть методы, которые нужно ОБЯЗАТЕЛЬНО использовать в дочерних классах или переопределять их по своему. Но совершенно точно, они вынуждены в своих дочерних классах эти методы описывать, пусть даже по своему.
@apelsin3001
@apelsin3001 6 жыл бұрын
Не чувак слишком абстрактное объяснение. Давай переделывай. Ясности не внес.
@ukropytv308
@ukropytv308 3 жыл бұрын
Ну такое. . .
Интерфейс в ООП
13:46
Volodya Mozhenkov
Рет қаралды 44 М.
Раннее и Позднее Связывание
12:44
Volodya Mozhenkov
Рет қаралды 40 М.
Normal vs Smokers !! 😱😱😱
00:12
Tibo InShape
Рет қаралды 120 МЛН
[柴犬ASMR]曼玉Manyu&小白Bai 毛发护理Spa asmr
01:00
是曼玉不是鳗鱼
Рет қаралды 49 МЛН
Como ela fez isso? 😲
00:12
Los Wagners
Рет қаралды 30 МЛН
Functor или Объект-Функция
10:30
Volodya Mozhenkov
Рет қаралды 8 М.
Агрегация и Композиция
19:49
Volodya Mozhenkov
Рет қаралды 56 М.
Абстрактные классы в Python
12:35
Python Clinic
Рет қаралды 2,7 М.
Фабричный метод
15:48
Volodya Mozhenkov
Рет қаралды 59 М.
Анонимный Объект
11:20
Volodya Mozhenkov
Рет қаралды 6 М.
Java Абстрактный класс VS Интерфейс
9:51
Петр Арсентьев
Рет қаралды 17 М.
Normal vs Smokers !! 😱😱😱
00:12
Tibo InShape
Рет қаралды 120 МЛН