Раннее и Позднее Связывание

แชร์
ฝัง
  • เผยแพร่เมื่อ 31 ก.ค. 2015
  • Раннее и Позднее связывание характеризует то, как действуйт программа при вызове функций на объекте подкласса через указатель на суперкласс.
    Эти понятия также часто называются статической и динамической типизацией.

ความคิดเห็น • 72

  • @roman-romadin
    @roman-romadin 5 ปีที่แล้ว +53

    Спасибо! Лучший стиль преподавания! Если бы так в универах преподавали ...

    • @grommaks
      @grommaks 4 ปีที่แล้ว +4

      В почти универе так) как я понял из вступления)

  • @undersun6301
    @undersun6301 2 หลายเดือนก่อน

    Так доходчтво тему позднего связывания никто не обьяснял.❤

  • @hatami74
    @hatami74 6 หลายเดือนก่อน

    Самое лучшее объяснение, которое встречал

  • @me_000_xXx
    @me_000_xXx 4 ปีที่แล้ว +10

    Спасибо 🖐️Искал аналогию virtual-метода в java, и, как оказалось, в java все методы виртуальные и нет надобности в отдельном кейворде аля virtual. И Володя это же рассказал. Прикольно)

  • @kirillnorkin8283
    @kirillnorkin8283 4 ปีที่แล้ว

    Володя, ты выносишь мне мозг, благодарю)))

  • @michaelgevlich2770
    @michaelgevlich2770 8 ปีที่แล้ว +8

    Отлично рассказываете. Единственное хотел увидеть больше примеров, не только с виртуальными функциями, но и динамически создаваемыми объектами и указателями.

  • @user-mcm
    @user-mcm 3 ปีที่แล้ว +1

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

  • @AlexeyNeklesa
    @AlexeyNeklesa 8 ปีที่แล้ว +7

    Молодец. Однозначно подписываюсь.
    Очень понравилось.

  • @user-nw5iw5ew9z
    @user-nw5iw5ew9z 2 ปีที่แล้ว

    Спасибо, Володя. Хорошо объяснил. :)

  • @keyrea1
    @keyrea1 6 ปีที่แล้ว

    Каеф) Супер доступно, даже для того, как я) Спасибо)

  • @eb6006
    @eb6006 ปีที่แล้ว

    Круто! Все встало на свои места!

  • @user-pd4gt9zz9c
    @user-pd4gt9zz9c 5 ปีที่แล้ว

    спасибо Вам. Уяснил разницу.

  • @user-gv7jq1lm4u
    @user-gv7jq1lm4u ปีที่แล้ว

    мужик красава! я тугодум даже понял!

  • @bennails3447
    @bennails3447 4 ปีที่แล้ว

    Правильный Володя. Лайк и подписка👍

  • @user-bo3nu8gz3c
    @user-bo3nu8gz3c 3 ปีที่แล้ว

    Спасибо огромное!!!

  • @user-hf5tl3gn3l
    @user-hf5tl3gn3l 5 ปีที่แล้ว

    я подписался с удовольствием!

  • @arcsin4083
    @arcsin4083 5 ปีที่แล้ว

    Спасибо!

  • @user-gf6vd5sy7h
    @user-gf6vd5sy7h 8 ปีที่แล้ว

    в rust есть zero cost abstraction благодаря которому не происходит поиска метода во время исполнения проги

  • @user-eq4li2vn4d
    @user-eq4li2vn4d 2 ปีที่แล้ว

    Человечище!)

  • @victorzedwings
    @victorzedwings 5 ปีที่แล้ว

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

  • @artemsliusar1282
    @artemsliusar1282 7 ปีที่แล้ว +3

    Здравствуйте.
    Подскажите, пожалуйста, Вы говорите, что динамическая типизация = позднее связывание. Но ведь Java - это язык со статической типизацией и поздним связыванием (в большинстве случаев).
    Т.е. как-то неодназначно.

    • @dentor2005
      @dentor2005 4 ปีที่แล้ว

      javarush.ru/groups/posts/439-razlichija-mezhdu-rannim-i-pozdnim-svjazihvaniem-v-java

  • @Qnoize
    @Qnoize 4 ปีที่แล้ว +2

    в Java 2 типа связывания: раннее, если методы static, private или final. В остальных позднее

    • @avazart614
      @avazart614 4 ปีที่แล้ว

      @Боня Ферзь Но не логично для С++ так как там virtual может быть private.

  • @alexmur07
    @alexmur07 6 ปีที่แล้ว

    четко объяснил. не прибавить не убавить. если твои падаваны тебя не понимут, то им в детсад надо.

  • @tierx4867
    @tierx4867 7 ปีที่แล้ว +5

    Спасибо большое. Но есть один момент с таким примером из-за которого он у меня не работал. Нужно чтобы функция принимала ссылку, иначе все равно вызовет метод родителя. Видимо если передавать по значению то при копировании что-то идет не так.

    • @VictorThD
      @VictorThD 6 ปีที่แล้ว +5

      Могу ошибаться, но если логически рассуждать, то если вы создаете функцию вида
      int foo(A a);
      то в момент вызова функции будет создан временный объект класса A, в него будет скопирована часть объекта b, которая относится к классу А. И именно эта копия будет использоваться в функции. А так как копия всегда является типом класса А, то и не должно возникать вопроса, функцию какого класса вызывать.
      Если вы создаете функцию вида
      int foo(A& a);
      и передаете объект класса B, то при вызове функции создания нового временного объекта производится не будет, а будет просто передана ссылка (можно воспринимать как нейкий абстрактный указатель) на уже имеющийся объект. И этот объект может быть любого дочернего типа со ссылками на свои же виртуальные функции. Поэтому тут есть возможность вызвать виртуальную функцию данного типа объекта.

    • @tzz528
      @tzz528 5 ปีที่แล้ว +1

      а еще проще это называется усечением типа

  • @turalbadalov480
    @turalbadalov480 6 ปีที่แล้ว +4

    Автор, правы ли вы называя ранее связывание статической типизацией? Думаю нет. Вот если бы назвали статическим связыванием , то считаю было бы верно. Ведь статическая типизация это совсем иное, и кстати, Java статически типизированный язык (с динамическим связыванием, хотя статическое связывание в java тоже есть). Статическая типизация это когда мы в момент объявления знаем тип объекта, например String str; А есть языки в которых этот тип не пишется, это языки с динамической типизацией. Вывод: то о чем вы говорите называется статическое и динамическое связывание и в java все таки есть и статическое связывание тоже. Казалось бы ну откуда в Java раннее связывание? А как же статические методы? вот пример, javarush.ru/groups/posts/439-razlichija-mezhdu-rannim-i-pozdnim-svjazihvaniem-v-java где показывается существование статического связывания и кстати JVM помечает такие методы и с помощью спец команд можно увидеть эти пометки в консоли.

    • @casusbelli9326
      @casusbelli9326 5 ปีที่แล้ว

      В видео перепутаны такие понятия, как типизация (typing) и диспетчеризация (dispatch).

  • @kipa3006
    @kipa3006 8 ปีที่แล้ว +2

    Не могли бы вы привести пример в котором использовалось бы раннее связывание? Где может быть применим такой способ связывания? Как вы уже говорили, во многих языках такой возможности нет вовсе - бывают ли ситуации, в которых есть острая потребность в раннем связывании, или такая возможность представляет скорее академический интерес?

    • @yanslow9083
      @yanslow9083 ปีที่แล้ว +2

      Java static, final, overload, все - раннее связывание

  • @splashattacks9714
    @splashattacks9714 7 ปีที่แล้ว +10

    А как же в Java статические и приватные методы, они же не являются виртуальными,так получается не все связывание в Java позднее?

    • @maxlich9139
      @maxlich9139 6 ปีที่แล้ว +4

      Да, судя по информации в интернете (в идеи надо в документацию к Джаве лезть), приватные методы, статические методы, методы, помеченные модификатором final, и конструкторы используют раннее связывание.

    • @june3878
      @june3878 2 ปีที่แล้ว

      @@maxlich9139 у java есть документация? 😳

    • @maxlich9139
      @maxlich9139 2 ปีที่แล้ว

      @@june3878 а куда она делась? О_о

    • @june3878
      @june3878 2 ปีที่แล้ว

      @@maxlich9139 это нельзя назвать документацией)

    • @alexpavlov9097
      @alexpavlov9097 2 หลายเดือนก่อน

      а что можно назвать документацией?

  • @MrRomanvideo
    @MrRomanvideo 4 ปีที่แล้ว

    Это тоже самое что компайл и рантайм полиморфизм?

  • @AndreyDelay
    @AndreyDelay 4 ปีที่แล้ว

    круто) такого наставника бы в работе

    • @VladimirMozhenkov
      @VladimirMozhenkov  4 ปีที่แล้ว

      Я занимаюсь репетиторством через интернет... если что.

  • @VictorThD
    @VictorThD 6 ปีที่แล้ว

    А в языке С тоже есть динамическая типизация?

  • @antonbeton5738
    @antonbeton5738 7 ปีที่แล้ว

    Крутое видео

  • @gagogoga794
    @gagogoga794 4 ปีที่แล้ว

    Бог компуктеров!!!

  • @ilya9852
    @ilya9852 ปีที่แล้ว

    Для всех методов Java используется механизм позднего (динамического) связывания, если только метод не был объявлен как final (приватные методы являются final по умолчанию).

    • @aojona
      @aojona 11 หลายเดือนก่อน

      и static

  • @Federation1323
    @Federation1323 3 ปีที่แล้ว

    Объяснения: уровень Бог

  • @ataganatagan2397
    @ataganatagan2397 6 ปีที่แล้ว +3

    В java есть статическое/раннее связывание

  • @Anton-ws8jn
    @Anton-ws8jn 8 ปีที่แล้ว +1

    Помоему это больше к полиморфизму относится, а не к связыванию. К примеру в .NET к позднему связыванию относится загрузка сборок во время выполнения программы и инстанциирование типов находящихся в них с последующим использованием их функционала. Поправьте если я не прав.

    • @VladimirMozhenkov
      @VladimirMozhenkov  8 ปีที่แล้ว

      Антон Самошин Дело в том, что я .NET не знаю, так что не совсем понимаю о чём идёт речь. Можете объяснить что такое "сборки".

    • @Anton-ws8jn
      @Anton-ws8jn 8 ปีที่แล้ว

      Vladimir Mozhenkov сборка в данном варианте просто обычная dll которая подгружается во время работы программы. К примеру у нас есть некий графический редактор, а в отдельной dll лежит какой нибудь плагин к нему и на этапе работы программы пользователь подгружает эту dll и задействует ее функционал (вызываются методы/функции классов из этой dll) тем самым осуществляется позднее связывание

    • @VladimirMozhenkov
      @VladimirMozhenkov  8 ปีที่แล้ว +1

      Антон Самошин Ясно вы про компиляцию и использование библиотек. Это не только в .NET - это везде так, но я никогда не слышал чтобы это называли ранним и поздним связыванием. Термины, которые мне всегда встречались - это статическое и динамическое связывание.
      В IT вообще очень часто бывает, что одни и те-же слова используются поразному в зависимости от контекста. И плюс тут ещё вопрос английского и русского языков.
      Когда начал читать ваш первый комментарий, подумал, что может вы говорили про ленивую инициализацию, которую также называют поздней иногда. Это опять-же совершенно другое понятие, никак не связаное с тем, о чём я говорил в этом конкретном видео.

  • @aleksandrkravtsov8727
    @aleksandrkravtsov8727 4 ปีที่แล้ว

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

  • @Mark_Sher_
    @Mark_Sher_ 7 ปีที่แล้ว +2

    Было бы неплохо если бы Вы нумеровали видео, тогда было бы понятно в какой последовательности смотреть.

    • @kgaussss7299
      @kgaussss7299 4 ปีที่แล้ว

      Ох как же этого не хватает!

  • @the2x548
    @the2x548 3 ปีที่แล้ว +2

    Я не понимаю, как foo(A a) вызывает a->get()

    • @june3878
      @june3878 2 ปีที่แล้ว

      Например так:
      foo(A a)
      {
      a.get();
      }

  • @me2beats313
    @me2beats313 4 ปีที่แล้ว

    видимо нужно для скорости

  • @yauhenizakhno8510
    @yauhenizakhno8510 5 ปีที่แล้ว

    Немного понял, но не совсем

  • @ninjacheese2168
    @ninjacheese2168 4 ปีที่แล้ว

    Поздняя типизация. ОК.

  • @user-pt2lq1ik7i
    @user-pt2lq1ik7i 4 ปีที่แล้ว +1

    public class Test {
    public static void main(String[] args) {
    A a = new B();
    int get = a.get();
    String foo = a.foo();
    System.out.println("get: " + get);
    System.out.println("foo: " + foo);
    }
    }
    class A {
    public int get() {
    return 100;
    }
    public static String foo() {
    return "foo1";
    }
    }
    class B extends A {
    public int get() {
    return 200;
    }
    public static String foo() {
    return "foo2";
    }
    }
    get: 200
    foo: foo1

    • @Qnoize
      @Qnoize 4 ปีที่แล้ว

      все верно в Java раннее связывание будет если метод static, final, private

  • @mailmeeeee
    @mailmeeeee 6 ปีที่แล้ว

    Посмотри на оформление своих видео в листинге и скажи: о чем оно? Посмотри на описание своего видео? и скажи: о чем видео то? Я только из комментов понял, что речь про Java...

    • @maxlich9139
      @maxlich9139 6 ปีที่แล้ว +1

      какая джава?! он использует язык с++

    • @mailmeeeee
      @mailmeeeee 6 ปีที่แล้ว

      вот и я про то же)) даже из комментов нихера не понятно о чем речь идет=)) гений маркетинга) код документирует наверное так же))

    • @maxlich9139
      @maxlich9139 6 ปีที่แล้ว

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

    • @sammeroff
      @sammeroff 5 ปีที่แล้ว +3

      Причем здесь язык? Это понятия из ООП, которые относятся к любому ООП языку.

  • @mrakobes228
    @mrakobes228 2 หลายเดือนก่อน

    Метод потомка вызовется, если метод переопределён, если метод не переопределён или перегружен, или имеет модификаторы (private,static,final) вызовется метод родителя родителя!!!!!!!!!!! ЧЁ орать то!!!ГЫЫЫ!!!

  • @JIockjoy
    @JIockjoy 2 ปีที่แล้ว

    Да, уж и зачем я связался.