• Как работает связывание данных?

    @DancingOnWater Автор вопроса
    Сам же задал, сам же отвечу.

    Отца русской демократии спасет mono.
    Ответ написан
    2 комментария
  • Что скрывается за понятием сlass в ООП?

    svd71
    @svd71
    ваши рассуждения - лапша полнейшая.

    Что бы понять, что такое объект нужно представить например производство обоев: трафарет - это класс, причем один рулон обоев уже объект со своими свойствами типа размер, цвет, состав бумаги и т.д.
    В програмировании эта абстракция может что то немного объяснить, но далека от реальности. Все методы в объекте располагаяются в классе и остаются неизменными. Но сам объект представляет из себя выделенный объем памяди, достаточный что бы вместит все поля этого объекта. Соотвественно для методов объекта есть одна отличительная особенность: первый передаваемый параметр в них - это ссылка на область начала расположения объекта, хотя в среде разаработки эта переменная чаще не показывается. То есть получается мы используем методы, передавая им ссылку на объект, используют необходимые поля ссылаясь память отностительно начала объекта.

    Другая интересная особенность - это классовые методы и поля (или применительно в к Яве - статические). Эти элементы уже распределены в классе в единственном экземпляре. Потому они и доступны из любого объекта. Но отличие таких методов от объектовых - первая переменная всегда ссылается на начало класса. Это значит в таких методах ничего не известно что творится в объектах. Да и вызов из них методов объектов всегда требует наличие самого уже созданного объекта. В некоторых ЯП такая проверка не проводится. поэтому можно иногда "смухлевать" : если в методе нет работы с полями объекта или ссылок на другие методы, где ведется работа с полями объекта, можно фиктивно вызвать указав, что объект это 0 (пример такого "глюка" есть в С++, в Дельфи, в ПХП [хотя это не язык]).

    Поосторожней со словом "интерфейс". В ЯП интерфейсом называется расширение функциональности классов, внося в них общие признаки. Классы можно масштабировать только наследованием (инкапсуляцию касаться не будем). То есть два класса невозможно объединить общими признаками, если они не "родственники". Но тут на помощь приходят интерфейсы. Если предствить наследование как "вертикальное" расширение, то с интерфейсам добиваются "горизондального" расширения.

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