Принципы ООП. 3. Полиморфизм

Поділитися
Вставка
  • Опубліковано 8 чер 2020
  • Всем привет! Это третий ролик из небольшого цикла лекций о принципах ООП. Сегодня поговорим о полиморфизме.
    Курсы для новичков:
    JAVA - bit.ly/2UnJInv
    JAVA Start - bit.ly/2XGYx6K
    Инструментарий JAVA - bit.ly/2MF6ZNB
    Automation QA (Java) - bit.ly/3f19VAi
    ANDROID - bit.ly/2AMSogz
    C#/.NET - bit.ly/2XKLGkg
    C# START - bit.ly/2XKkkuh
    PYTHON - bit.ly/2YhlmNl
    FRONT-END - bit.ly/3f4sGCZ
    WORDPRESS Developer - bit.ly/30nHtV1
    SALESFORCE Developer - bit.ly/2YhlwEr
    UI/UX дизайн - bit.ly/3cK6UCX
    Project management - bit.ly/2Yc458A
    Обучение на проекте - bit.ly/37b9AIy
    Продвинутые курсы для состоявшихся девелоперов:
    GRASP and GoF Design patterns - bit.ly/3dFSpkO
    Enterprise patterns - bit.ly/37kaHpy
    Сайт Foxminded: bit.ly/2ze9Fi3
    Foxminded в VK: foxminded
    Foxminded в ФБ: / foxmindedco
    FoxmindEd в Instagram: / foxminded.ua
    Мой Telegram: t.me/nemchinskiyOnBusiness

КОМЕНТАРІ • 303

  • @SergeyNemchinskiy
    @SergeyNemchinskiy  Рік тому

    🦊Новый поток Advanced курса Enterprise Patterns стартует уже 1 февраля 2023 года ❗
    Регистрация - go.foxminded.ua/3GPXeYF

  • @expurple
    @expurple 4 роки тому +317

    Ценю работу над каналом, но поддержу мнение, что за столом было душевшее) И эхо в этой студии сильное

  • @dimitro.cardellini
    @dimitro.cardellini 4 роки тому +118

    По теме )
    .
    # Полиморфизм -- это возможность одного и того же алгоритма обрабатывать данные разных типов, независимо от того, какие это типы. Без проверок типов внутри и ветвления в зависимости от того, с каким конкретным типом алгоритм работает в конкретный момент времени.
    .
    # Мнимый полиморфизм (ad-hoc) -- это когда только создается видимость, что алгоритм полиморфный, но на самом деле в момент компиляции/транспайлинга программы либо происходит подстановка другого алгоритма, в зависимости от типа/ов переданных аргументов, либо происходит неявное преобразование типа/ов аргумента/ов. Важно то, что в результате есть один или больше алгоритмов, каждый из которых мономорфный -- т.е. работает с данными строго одного типа. Ярким примером является перегрузка функций/методов. Когда для обработки разных данных создаются разные функции, имеющие одно имя, но разную сигнатуру (имя + перечень типов аргументов). Такое возможно далеко не во всех языках программирования.
    .
    К такому типу полиморфизма относится и паттерн-матчинг, т.к. он сводится к совокупности мономорфных алгоритмов.
    .
    По способу достижения полиморфизма можно выделить:
    - полмиорфизм подтипов
    - структурный полиморфизм
    - параметрический полиморфизм
    .
    # Полиморфизм подтипов - это возможность алгоритма работать со всеми подтипами одного общего типа, опираясь на свойства общего типа (например, на то, что экземпляры общего типа, а значит и всех его подтипом, имеют определенный метод, с определенной сигнатурой). Наследование -- это частный случай создания Подтипа. Определяя интерфейс, создается тип. Реализация интерфейса -- это также создаение Подтипа, хоть наследование и не происходит.
    TypeScript и Flow работают именно с таким типом Полиморфизма, даже не смотря на то, что проверка того, является ли Тип подтипом Общего Типа осуществляется путем сопоставления структур Типа и Общего типа (без необходимости синтаксически декларировать такую связь).
    .
    # Структурный полиморфизм - это возможность алгоритма работать с объектами (значениями), игнорируя их тип и способ создания, и предполагая, что объекты/значения обладают нужными свойствами (например у объектов будет нужный метод с нужной сигнатурой). Его часто называют Утинным Полиморфизмом. Такой работат в JS. Собственно, я бы Структурный полиморфизм отнес к разновидностям Полиморфизма подтипов, но с оговоркой, что статической проверки типов нет.
    .
    # Параметрический полиморфизм -- это возможность алгоритма работать с данными "не названных" типов, которым присвоены абстрактные имена. Т.е. типы являются Параметрами алгоритма, равно, как и его аргументы. Это всеми нами гороче любимые Generic-и. Например: Array -- это пример Параметрического полиморфизма. Tree, List etc. etc.

    • @linkernick5379
      @linkernick5379 4 роки тому +3

      :+1:

    • @linkernick5379
      @linkernick5379 4 роки тому

      Только утиная типизацияи структурная типизация это не одно и то же. Например, автоматическую реализацию интерфейсов в Го некорректно называть утиной типизацией.

    • @haykmkrtchyan7093
      @haykmkrtchyan7093 2 роки тому

      Как по мне, в дженериках тоже после компиляции работаем с мономорфным типом и оно становится ad-hoc.

    • @dimitro.cardellini
      @dimitro.cardellini 2 роки тому +1

      ​@@haykmkrtchyan7093 думаю, это зависит от языка и от дженерика. Например, в TS на тип-параметр можно наложить органичение: соответствовать какому-либо интерфейсу и тогда все пойдет по полиморфизму подтипов. А может и зарезолвится в ad-hoc полиморфизм -- если это например: f = (a: T, b: T): T => a + b;
      В общем, параметрический полиморфизм -- это круто, полезно и вкусно.

    • @SergeySuper_Silver
      @SergeySuper_Silver 11 місяців тому +2

      Очень полезный комментарий. Спасибо)

  • @zabiyaka785
    @zabiyaka785 4 роки тому +2

    Ой, сколько новых видео!!! Сергей, ставлю лайк даже не посмотрев (сейчас исправлю эту ошибку), так сказать заочно! Большое вам спасибо! Долго отсутствовал, сейчас буду смотреть каждое новое для меня видео.

  • @user-bk6ok6do9i
    @user-bk6ok6do9i 4 роки тому +45

    Дублировать текстом вещи о которых идет речь есть очень хорошо. Примеры бы с кодом какие в виде призентации на фоне. А так супер!)

  • @homo-ergaster
    @homo-ergaster 4 роки тому +189

    Белы фон вам не идет. Прежние видео были ламповее, чтоли.

    • @homo-ergaster
      @homo-ergaster 3 роки тому

      @kotto Почему частное? В последнем постанвлении правительства тоже про это говорится.

  • @masturch99f
    @masturch99f 4 роки тому +1

    Отличный формат! Всё очень лаконично и очень информативно!

  • @yana7j
    @yana7j 4 роки тому +196

    прикольный формат, но прошлый был, как-то, более по-домашнему, более уютно)

    • @user-wd4mo4vl3h
      @user-wd4mo4vl3h 4 роки тому +6

      Согласен, кажется сейчас домашний формат в тренде

    • @syoritohatsuki
      @syoritohatsuki 4 роки тому +1

      Кря

  • @Vanderflit.
    @Vanderflit. 4 роки тому +14

    За столом как то интересней и привычней. А еще на столе стоит великолепная кружка!

  • @egorsank4791
    @egorsank4791 4 роки тому +13

    Спасибо!
    Я из тех кому все равно на фон, звук, одежду и прочее.
    Содержание - Самое главное!
    Спасибо за содержание!
    P.S. Мне во всех ваших видео нравится антураж

  • @nmodonov
    @nmodonov 3 роки тому +11

    Блин. А про if-то мысль реально хороша. Объяснение полиморфизма через нее пока самое доступное на моей памяти.
    Было бы круто добавить короткий пример замены if-а или оставить ссылку на него.

    • @vitall789
      @vitall789 Рік тому

      Да сложно представить истинный полиморфизм заменяющий IFы без перегрузки или нарушения инкапсуляции - первого принципа ООП.
      Разве только приходит в голову методика разыменования аргумента в метод базового класса или что-то подобное!
      ПС: Возможно перегрузка методов-интерфейса хороший вариант решения данной проблемы и я так понимаю что это не будет считаться как ad-hoc полиморфизм.

  • @user-kl3mt7rl2n
    @user-kl3mt7rl2n 4 роки тому +1

    Очень крутой формат, намного лучше предыдущего.

  • @linkernick5379
    @linkernick5379 4 роки тому +31

    В видео было много слов, но, к сожалению, некоторые из них правильные, а некоторые - нет. В итоге складывается впечатление, что полиморфизма всего два, и из них один какой-то неправильный (ad-hoc).
    Что лишний раз подтверждает тезис, что практика без теории __слепа__.
    Ниже определение полиморфизма более-менее соответствующее теории.
    Полиморфная переменная -- это переменная, которая может принимать значения разных типов данных.
    Полиморфная функция -- это функция, у которой хотя бы один аргумент является полиморфной переменной (не забываем о методах, которые суть функции, и у которых есть неявный первый параметр this).
    Полиморфная функция бывает двух видов.
    Ad-hoc полиморфизм - когда функция ведет себя по разному для аргументов разных типов. Функция "нарисовать" - рисует по разному разные геометрические фигуры.
    Параметрический полиморфизм - когда функция ведет себя одинаково для аргументов разных типов, нет информации о настоящем типе и значение любого типа может быть передано в качестве аргумента. Пример - функция "положить элемент в контейнер". Заметим, что subtype полиморфизм (который в ООП называют просто полиморфизмом, когда вместо ссылки на базовый класс можно передать ссылку на производный) __НЕ__ является параметрическим полиморфизмом, потому что тип известен (тип базового класса).
    Иногда выделяют статический и динамический полиморфизм - когда тип разрешается во время компиляции, или во время выполнения.
    Теперь можно рассмотреть частные случаи:
    1. _Преобразование чисел_, когда функция принимает double, туда иногда можно передать целые числа и float, этот вид полиморфизма часто называют automatic coerce, в разных языках делается по-разному, скажем в OCaml его вообще нет и нужны явные преобразования.
    2. _Перегрузка функций_, когда одно имя функции используется для аргументов разных типов и количества аргументов. Используется в постпроцедурных ОО языках, таких как С++, Java, C#. В функциональных языках отсутствует, поскольку ломает вывод типов (впрочем в Haskell нетрудно сделать аналог перегрузки).
    3. _Параметрический полиморфизм_, когда функция получает тип (или несколько типов в качестве параметров), например `foo(a: T): T` - функция имеет один параметр-тип и один полиморфный параметр, который связан с этим типом. Такой полиморфизм известен под именем generics, и присутствует под этим именем в Java, Kotlin, C#, Scala и может быть в будущем Go :-) Почему в Scala этот вид полиморфизма значительно мощнее? Потому что на параметры-типы можно накладывать очень детальные ограничения, например:
    def lift[F[_]: Functor]: F[A] => F[B]
    здесь на параметр F накладывается ограничение, что F - это тип с параметром, и подтип типа Functor (который тоже параметризован, но это можно узнать посмотрев его определение).
    В Haskell (или ещё более далёком от мейнстрима Idris) ограничения на типы могут быть ещё более детальные, и сами параметры-типы можно связать ограничениями, и это всё позволяет отсеивать компилятором огромное количество ошибок.
    Таким образом, ограничения позволяют прокинуть мостик между параметрическим и ad-hoc полиморфизмом и выбирать какой-то нужный вам баланс. Впервые большой шаг к этом сделал Филипп Вадлер в работе "How to make ad-hoc polymorphism less ad hoc" users.csc.calpoly.edu/~akeen/courses/csc530/references/wadler.pdf
    4. Наконец _полиморфизм подтипа_ - это вид ad-hoc полиморфизма, когда первый неявный параметр this имеет тип базового класса, диспетчеризация происходит в рантайме, обычно с помощью VTable. С точки зрения теории довольно слабый вид полиморфизма, поскольку ограничение на тип лишь одно, типом базового класса снизу. Естественно, делает невозможным точный вывод типов, не позволяет диспетчеризоваться по нескольким типам параметров, и по типу возвращаемого значения, вынуждает делать нетипобезопасные преобразования (т.н. downcasting).
    5. Также есть ещё row polymorphism, когда селектор поля, например .user в разных записях может выступать как самостоятельное значение, передаваться в параметры и использоваться в полиморфных контекстах, а будучи применённый к разным значениям, скажем account и book возвращает соответственно account.user и book.user. Чем-то напоминает структурные типы, но гибче.
    6. Есть ещё много других, таких как family polimorphism, но это уже глубины теории типов, до практики они ещё не дошли.
    Итог. Сергей Немчинский конечно хороший дядечка, позитивный и харизматичный, но не стоит верить всему, что он говорит без оглядки, нужно проверять сведения и читать хорошие книжки, скажем Пирса "Типы в языках программирования".

    • @eligolin9947
      @eligolin9947 3 роки тому

      Спасибо что успакоели меня (Scala кодера) а то прям кровь из ушей лилась.
      Думал сам закаментировать но решил сначала адекватный коммент поискать.
      Ещё + вам в догонку.

    • @handsupslowly
      @handsupslowly 3 роки тому +2

      @DASSDED ну что спросили ?)

  • @leetovetz
    @leetovetz 4 роки тому +46

    потерялась ламповость видео. теперь сухой профессионализм.
    двоякое чувство)))

  • @dmitrinikolaev6986
    @dmitrinikolaev6986 4 роки тому +1

    Аааааа как же не привычно) но видео классные! Спасибо!

  • @maximgribencicov3619
    @maximgribencicov3619 3 роки тому +1

    Очень полезные и информативные ролики получаются у вас. Хотим больше "обучалок"

  • @user-wl7gt8qc9s
    @user-wl7gt8qc9s Рік тому

    Сергію, дякую! Не додам нічого нового до того, що сказано іншими, просто урок вийшов традиційно змістовним і цікавим і заслуговує на "свіжий" коментар))

  • @Avram_Vitalik
    @Avram_Vitalik 2 роки тому

    Приятно смотреть ваш канал. Спасибо за хороший контент. Успехов.

  • @alexsss3851
    @alexsss3851 4 роки тому

    Отлично! Спасибо за труд!

  • @user-lg3nm9qt9z
    @user-lg3nm9qt9z 4 роки тому

    Новый формат - мне зашёл )

  • @shane2899
    @shane2899 4 роки тому +2

    Новый формат супер! Все внимание фокусируется о том, что говорит диктор☝🏻 Возможно, для лучшего понимания полиморфизма можно было бы добавить несложные схемы или код, чтоб акустическся информация еще визуально подкреплялась. Сергей, спасибо Вам!

  • @mathew9794
    @mathew9794 Рік тому

    Кратко, ясно, понятно. Благодарю.

  • @eugenstakhursky9604
    @eugenstakhursky9604 4 роки тому +24

    Классно получилось, спасибо Сергей!
    P.S. в следующий раз напишите титрами когда можно открывать уши)))

  • @bim1430
    @bim1430 4 роки тому +43

    Во фронтэнде - новый формат видео, а в бэкэнде релокация офиса ? =)

  • @David-jy1fm
    @David-jy1fm 3 роки тому

    Ну прям очень-очень интересно слушать. Хоть ничего и не понимаю ))))

  • @romansharpe1131
    @romansharpe1131 4 роки тому

    Ну наконец то мой любимый полиморхвизм)

  • @borismatashin5891
    @borismatashin5891 3 роки тому +1

    Благодарность за coding by exception!

  • @neuralnetwork.2807
    @neuralnetwork.2807 4 роки тому +5

    Мне новый формат даже больше понравился, чем старый

  • @itcloudguy
    @itcloudguy 4 роки тому +48

    Советую поработать над звуком. В новой обстановке эхо от стен напрягает.

    • @leonidkorkulenko4838
      @leonidkorkulenko4838 4 роки тому

      Плюсую. Со звуком точно нужно что то делать. Эхо очень жёсткое.

    • @leonidkorkulenko4838
      @leonidkorkulenko4838 4 роки тому

      И кстати. В целом формат очень классный. Двигаетесь в правильном направлении. Но звук поправить надо =)

  • @user-gs7ro3tl9t
    @user-gs7ro3tl9t 4 роки тому +1

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

  • @user-vi5yp4kx1f
    @user-vi5yp4kx1f 4 роки тому +1

    +1 за новый формат

  • @arthurfonzerelli6484
    @arthurfonzerelli6484 4 роки тому +74

    Фон лучше убрать - верните как было)

  • @gilzaa
    @gilzaa 4 роки тому +1

    Вы молодец. Достаточно давно слежу за вашим каналом. Даже 2 месяца был на проекте в вашей школе. Надеюсь, даже спустя неделю, вы прочитаете этот коммент. Хотелось бы и мне высказать свое мнение по поводу видео, хотя обычно комменты не оставляю.
    С фоном лампово и по домашнему, без фона - динамически и по современному. Больше всего понравились тезисные подпись. С ними как-то проще воспринимается информация. Можно подписи оставить (пофиг на фон))

  • @doom678
    @doom678 3 роки тому

    Смотрю уже 30 ролик, ничего не понимаю но очень интересно!

  • @benedikt7777
    @benedikt7777 4 роки тому +12

    По поводу ИФов и тему с простыней хотелось бы увидеть пример кода))

    • @MaxKyivUa
      @MaxKyivUa 9 місяців тому

      chat GPT в помощь. Я только что у него попросил переписать мой метод где много ИФов было, осталось только понять ответ ))

  • @user-hl7zj8fc7u
    @user-hl7zj8fc7u 4 роки тому

    Лайк сразу, новый формат понравился, с примерами кода думаю было бы лучше, а в общем всё кратко и по делу. Спасибо большое)))

    • @SergeyNemchinskiy
      @SergeyNemchinskiy  4 роки тому +1

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

    • @user-hl7zj8fc7u
      @user-hl7zj8fc7u 4 роки тому

      @@SergeyNemchinskiy Как говорится "не попробуешь - не узнаешь")))

  • @Youtube123Viewer
    @Youtube123Viewer 4 роки тому +6

    Не всегда нужно использовать наследование для достижения параметрического полиморфизма. Есть языки, в которых импелементация интерфейсов не требует наследования (Rust, Go, Typescript). Есть дженерики и темплейты. Есть Duck Typing и динамические языки. Конечно, это не значит, что не нужно использовать наследование, но его ограниченность нужно понимать и стараться избегать.

  • @serhiiho
    @serhiiho 4 роки тому +2

    Не хватает зарисовочек на белом фоне, чтобы визуально было понятно на примере, а так как радио послушал, но в целом как всегда супер;) спасибо за видео

  • @NikitaUtochkin
    @NikitaUtochkin 4 роки тому

    Есть вопрос по поводу применения вставок с помощью JNI. Кроме самого логичного кейса использования сишных и ассемблерных вставок в Android приложениях, это вообще имеет место быть? Просто это рушит весь принцип jvm и тд. Какие кейсы использования можете привести?

  • @IlyaIstomin
    @IlyaIstomin 4 роки тому

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

  • @user-iz2jo8cz9w
    @user-iz2jo8cz9w 4 роки тому

    Белый фу, только темная тема!))) Сергей, спасибо

  • @sergeyshestakov4936
    @sergeyshestakov4936 Рік тому

    спасибо!

  • @liftoman_777
    @liftoman_777 2 місяці тому

    В ардуиноIDE есть патерны?

  • @sergeyivanin7904
    @sergeyivanin7904 4 роки тому

    А мне понравилось. Полиморфизм серьезная тема, и белый фон как бы говорит что нужно внимательно слушать Сергея а не смотреть что на столе лежит

  • @descar1626
    @descar1626 4 роки тому +16

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

    • @user-us5uf9tt8i
      @user-us5uf9tt8i 4 роки тому +1

      а лучше вообще убрать

    • @NummeSpnet
      @NummeSpnet 4 роки тому

      название частей в разделении хорошая идея, а еще под видео сделать "оглавление" с ссылками на эти самые части видео.

    • @iex32
      @iex32 4 роки тому +2

      а можно на эти заставки вставлять что-то интересное, трейлеры фильмов например

  • @yurii_s_m_25
    @yurii_s_m_25 4 роки тому

    Дуже дякую!

  • @lexlotar4847
    @lexlotar4847 3 роки тому

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

  • @HaiIag
    @HaiIag 4 роки тому +2

    Рівень відео зростає, що не може не радувати!

  • @antoneltonij8362
    @antoneltonij8362 3 роки тому

    Хороший эксперимент с фоном. За столом было душевнее.
    Но с белым фотом можно выводить дополнительную информацию.
    Единственное я бы добавил больше информации. И когда она появляется, сдвигал спикера больше в бок

  • @developmobi3529
    @developmobi3529 4 роки тому

    Первую очередь спасибо за видео. Было бы лучше показать + примеры как работает полифогизм :-)

  • @liamsmith7052
    @liamsmith7052 4 роки тому

    Спасибо. Давайте про Event Sourcing, DDD и CQRS.

  • @andriyvandam5978
    @andriyvandam5978 3 роки тому

    Сергей, здраствуйте.... бил би очень благодарен за какой нибудь конкретний пример замени if полиморфизмом, или если у вас есть уже такое видео, то буду благодарен за линку, а то чтото никак в голове такой код не виресовуется....
    Спасибо

  • @ilya_123__
    @ilya_123__ Рік тому

    спасибо

  • @eidenrid7735
    @eidenrid7735 3 роки тому

    Зашел только для того, чтобы убедиться что автора всё еще зовут Сергей Немчинский. Убедился, теперь можно снова спать спокойно

  • @user-iq2ic3mh9z
    @user-iq2ic3mh9z 4 роки тому +26

    Сергей, судя по фону, вы устроились в Apple, поздравляю!

    • @goodvin8554
      @goodvin8554 4 роки тому +1

      Это был бы шаг назад. У Сергея своя фирма.

    • @mannas273
      @mannas273 4 роки тому +1

      @Volodymyr Volodymyr ээээммим всегда. Если там не условия как у шаха

  • @shutterradio
    @shutterradio 4 роки тому +3

    Новый формат - супер! Осталось только английских субтитров добавить чтоб весь мир смотрел :)

    • @maadinpavliev9565
      @maadinpavliev9565 4 роки тому

      Согласен если с делать субтитры и английское название водосам, даже старым это взлетит.

  • @dmitrymenshov8694
    @dmitrymenshov8694 4 роки тому +1

    Сергей, запишите видео почему вы перешли с C++ на Java. Я постигаю плюсы, очень нравится, но очень сложно=), потому крайне хотелось бы послушать вас. Благодарю!

  • @SuperLinuxoid
    @SuperLinuxoid Рік тому

    дякую!!!

  • @juliusmalkov9620
    @juliusmalkov9620 4 роки тому

    Прикольная смена, но я ещё не проверял просмотр ночью в темноте) но пока нравится весь формат - по современному, что ли)

    • @SergeyNemchinskiy
      @SergeyNemchinskiy  4 роки тому

      мы именно для этого и старались

  • @user-gs9ly7qo3u
    @user-gs9ly7qo3u 4 роки тому

    Разве при перегрузке методы называются по разному? Или это просто оговорка?

  • @pasharukin8346
    @pasharukin8346 4 роки тому

    круто с фоном

  • @52352.
    @52352. 4 роки тому +1

    спасибо очень интересно. Побольше информации для чайников от архитектора как устроен компьютер интернет сайты и серверы..
    читаешь порой вакансии и запутаешься в терминах разжуйте пожалуйста в видео вакансии с hh.ru например думаю многим будет интересно:"
    Минимум 2 года опыта коммерческой разработки ПО.
    Хорошее знание теор. минимума computer science.
    Хорошее владение языком Java, опыт серверной разработки на нем.
    Знания и опыт многопоточного программирования.
    Знакомство с JavaScript, опыт разработки браузерных приложений
    Опыт работы с Java 8
    Знакомство с продуктами Atlassian.
    Знакомство с функциональными языками программирования, FRP.
    Писать unit-тесты, в отдельных случаях - интеграционные тесты.
    Structure - Atlassian SDK, Java, REST, JavaScript, jQuery, HTML5. Рабочее окружение - IntelliJ IDEA, Git, Maven, TeamCity, BitBucket Server, Docker. Тесты серверного кода пишутся на Groovy / Spock, клиентского - на JavaScript / QUnit.
    Мы широко используем Structure
    новый важный функционал покрывается unit-тестами;
    Code Review у нас обязателен для каждого изменения;
    подробное ручное тестирование готовых сборок.

  • @vladislavpavlov35
    @vladislavpavlov35 3 роки тому +1

    Не плохо бы побороть эхо и использовать пастельные тона в качестве фона. Спасибо за информацию)

  • @serggio88888
    @serggio88888 4 роки тому

    Ну молодца

  • @kirillromanov1184
    @kirillromanov1184 4 роки тому

    Идея с новым фоном хорошая. Возможно стоит попробовать снимать стоя.

  • @levp1801
    @levp1801 3 роки тому

    спасибо, помогло на собесе

  • @nazarfernos184
    @nazarfernos184 4 роки тому +2

    Один раз захлох на этом вопросе на собеседовании. Спасибо за Ваш труд

  • @VseNikiSukaZanyaty
    @VseNikiSukaZanyaty 4 роки тому +3

    Можете тогда рассказать, что понимают под абстракцией, почему считают принципом ооп, и почему это не принцип ооп?

  • @arthur.v.babayan
    @arthur.v.babayan Рік тому

    А интересно, функции с перегрузкой, не if используют ???

  • @andrey12277
    @andrey12277 4 роки тому +1

    Очень хочется услышать про абстракцию, пусть и не как принцып ООП, но как пример работающей методологии.

    • @SergeyNemchinskiy
      @SergeyNemchinskiy  4 роки тому +2

      хорошо :) А вы почему не подписались? :)

  • @lexaka26
    @lexaka26 3 роки тому

    - О себе вы указали "программист с большим стажем", так, неплохо. Что вы имели ввиду под уровнем английского D8?
    - Илс.

  • @onebytesiteit30-75
    @onebytesiteit30-75 4 роки тому +1

    самый топовый канал. Немного музычка отвлекает на фоне
    Благодарю за информацию . Поздравляю скоро 100 000 подписчиков .
    У меня не большой канал но тоже стараюсь для начинающих в айти делать хорошие видео .
    Если что заглядывайте надеюсь понравится я очень стараюсь .

  • @user-jk9tp5qi1s
    @user-jk9tp5qi1s 4 роки тому +1

    Сергей, отличный формат, но мне кажется слишком много наездов/увеличения камеры и возможно лучше использовать текст либо при наезде либо нет) Спасибо за видео

  • @user-zr9no8hv8g
    @user-zr9no8hv8g 4 роки тому +1

    Слышать всегда интересно! но эхо действительно мешает и фон белый асоциация с больницей, а вот без стола смотритесь солиднее:)))

  • @haykmkrtchyan7093
    @haykmkrtchyan7093 2 роки тому

    Поли - Много, морфизм - форм. Полиморфизм - много форм.

  • @oshastitko
    @oshastitko 4 місяці тому

    а мне наоборот, всегда было непонятно, почему никто никогда не говорит о том, что if-ы - это по сути альтернатива полиморфизму. Ведь if это как раз об этом - проверить что-то, что в принципе может быть разделено на 2 (или более, если с else) класса с общим предком, в котором, так сказать, описан весь тот контекст, в котором мы работаем

  • @Ivan-yp8nq
    @Ivan-yp8nq 4 роки тому +11

    Спасибо за интересное видео👍
    Но возможно стоит включить тёмную тему

  • @StNizelan_UA
    @StNizelan_UA 4 роки тому +8

    Вернити уютный офис :с
    холодно как то в вашей студии :С

  • @vasilyya7578
    @vasilyya7578 2 роки тому

    Отлично! Тока нужно поменять произношение слова else, а то слух режет)

  • @nikitavovny3792
    @nikitavovny3792 4 роки тому +2

    06:45 тут я поностальгировал по былому формату

  • @AllWayToDeath
    @AllWayToDeath 4 роки тому

    Можно послушать про паттерны, чтобы больше не затыкать уши?
    Или такое видео уже есть на канале?

  • @ivansemenov3399
    @ivansemenov3399 4 роки тому

    Без примеров кода понятно скорее тем, кто в теме! Примеры кода, думаю, логично предоставлять на Java.

  • @Alexander.Portnoy
    @Alexander.Portnoy 4 роки тому

    С напряжением смотрел видео, ожидая, когда же ты начнёшь как обычно "гы-гы" впопад и невпопад. НО ЭТОГО НЕ ПРОИЗОШЛО!!! Прям видно, как нелегко тебе это давалось! Но ты смог! Респект и уважуха!!! 👍🏻👍🏻👍🏻😂 Так гораздо представительнее и производит лучшее впечатление. Признаюсь, эти постоянные гы-гы раздражают, но может это проблема во мне 😂
    Новый формат определённо имеет право на существование, но и старый оставить тоже было бы неплохо. Возможно, стоит выбирать формат в зависимости от темы.
    Согласен с другими комментаторами на тему звука (эхо) и притянутых за уши вставок-заставок. Если бы меня попросили выбрать лишь один формат из двух, то пока что старый побеждает. Но ИМХО пока ещё рано делать выводы. После пяти-десяти роликов в новом формате понятнее будет.
    Спасибо за интересный канал 👍🏻

    • @SergeyNemchinskiy
      @SergeyNemchinskiy  4 роки тому +1

      о господи... А вы понимаете, что такими комментариями очень демотивируете авторов? Зачем вы это делаете? У вас проблемы с самооценкой?

    • @Alexander.Portnoy
      @Alexander.Portnoy 4 роки тому

      @@SergeyNemchinskiy Не понимаю. Честно.

    • @SergeyNemchinskiy
      @SergeyNemchinskiy  4 роки тому

      @@Alexander.Portnoy ну, теперь вы знаете

  • @user-gn8jo3zd8y
    @user-gn8jo3zd8y 4 роки тому +1

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

  • @user-qn1nq2bb5u
    @user-qn1nq2bb5u 3 роки тому

    Ещё 1 взрыв мозга от той самой мысли Т_Т

  • @ValerianAndStuff
    @ValerianAndStuff 4 роки тому

    Существует ли ооп язык без ифов?

  • @grommaks
    @grommaks 4 роки тому

    Эхо сильное, а так формат хороший :)только в старом формате было прикольно наблюдать за новыми вещами на столе и в фоне...
    Так через интерфейсы реализуется полиморфизм...зачем наследование 🙄

  • @AllWayToDeath
    @AllWayToDeath 4 роки тому +11

    Новый формат интересный, но постоянные заставки для склейки кусков видео лишние.
    ИМХО

    • @VENTO_off
      @VENTO_off 4 роки тому +2

      Или хотя бы сделать время проигрывания заставки быстрее, но а так да - лишнее

  • @Elisha_GG
    @Elisha_GG Рік тому

    Пришел от Бороды, когда начал гуглить термины упомянутые там.

  • @leonl2794
    @leonl2794 4 роки тому

    Лично я полиморфизм понимаю так: есть полиморфизм с точки зрения перегруженных (overload) методов и переопределенных (override). Полиморфизм для перегруженных методов - не более чем "синтаксический сахар", т.к. в ООП функции однозначно идентифицируются по имени и по формату входных параметров (их тип и количество), то для удобства написания кода разработчику стоит помнить только одно название метода, а конкретная функция по данному имени будет выбрана уже компилятором на основе формата входных данных и встроена в код.
    А полиморфизм для переопределенных методов - это т.н. "динамическая диспетчеризация методов", которая работает во время исполнения программы, вызов конкретной реализации функции зависит от типа определенного объекта, а не типа ссылки объекта. Но тип ссылки объекта будет определять интерфейс взаимодействия с этим объектом. И в этом случае полиморфизм дает большие преимущества - вызываемой среде (какому-нибудь фреймворку, например) не нужно ничего знать об реализации объектов-наследников, если он уже знает интерфейс взаимодействия с объектом. И в байт-коде (если это Java) нет "жесткой" связи с функцией, которая должна вызываться, и JVM во время работы программы ищет реализацию конкретной функции для конкретного объекта, который реализует интерфейс.
    Это позволяет, например, приложениям на Android динамически устанавливаться и запускаться без необходимости перекомпилировать фреймворк (базовую jvm-программу) Андроида (статически "встраивая" в него код приложения и жестко прописывая идентификаторы реализуемых функций), без перезагрузки и прочей дичи. Системе (исполняемой среде машины) ничего может быть неизвестно о собственных классах приложения и как с ними работать напрямую, но при этом знает, как взаимодействовать с известными ему базовыми классами (интерфейсами), унаследованными/имплементированными из фреймворка.
    Именно такой полиморфизм позволяет быть фреймворку и приложению - отдельными модулями в одной исполняемой среде.
    У меня примерно такое понимание складывается, сам изучаю Java по книге Шилдта. И лично мне всегда казалось, что полиморфизм (с практической точки зрения, а не абстрактной теории) - это только про переопределяемые методы, который существует только в ООП. А перегрузка - это просто иной способ однозначной идентификации функции по тому же имени, но с разным форматом входных данных, которая, в теории, вполне могла бы существовать и в ФП.

  • @fife3366
    @fife3366 4 роки тому

    Мне лично у вас в кабинете больше нравилось)

  • @Maloj2006
    @Maloj2006 4 роки тому

    Запиши про абстракцию все таки, только не в ключе ООП, а своё мнение

  • @user-um6fj1us4c
    @user-um6fj1us4c 4 роки тому

    Сергей, спасибо за ваши видео. Как вы правильно заметили, полезно не только новичкам, но и опытным. Мне полезно в том, что я подмечаю моменты, которые для меня казались сами собой разумеющимися, но по видео и по комментариям вижу, что это не так, и теперь, при общении с младшими коллегами, я уточняю их понимание этих вопросов.
    А не думали ли вы снять видео про абстракцию не как принцип ООП, а как одного из "принципов" здравого смысла? Я довольно долго работал разработчиком электронных устройств, меньше - разработчиком микроэлектронных устройств, довольно много работал со структурным программированием, занимался планированием работ, сейчас довольно много работ с ООП. И везде нужны абстракции. Я на этих примерах объясняю молодым коллегам, как пользоваться абстрагированием. Если вы заинтересуетесь данной идеей, могу помочь с применением абстрагирования вне программирования, чтобы сэкономить вам время.

  • @DM14Andre
    @DM14Andre 4 роки тому +24

    Эхо мешает сильно

  • @user-lz1yb6qk3f
    @user-lz1yb6qk3f 3 роки тому

    Инкапсуляция в смысле сбора в одно место есть ещё в древних сях, что как бы говорит

  • @TheRedfordby
    @TheRedfordby 4 місяці тому

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

  • @nephritered4466
    @nephritered4466 4 роки тому

    Ad hoc - то латынь, "to this", "специально для этого". Так что смело произносите "Ад хок" - фас поймутт. Если хотите блеснуть чешуей - вот на выбор британское и американское произношение: dictionary.cambridge.org/us/dictionary/english/ad-hoc

  • @iyhan1987
    @iyhan1987 4 роки тому +4

    Ну, если не про абстракцию,может про MVC? :)
    Это хоть и не принцип ООП, но новичакам полезно бы послушать

  • @user-pb9mb5gh5w
    @user-pb9mb5gh5w Рік тому +1

    А вы сейчас о чем говорили? Я думал, что мне тут понятным языком что-то объяснят. А меня тут только загрузили непонятными словами

  • @igor_knv
    @igor_knv 3 роки тому

    Запишите плиз видео, почему абстракция - не принцип ооп.