Ответы пользователя по тегу ООП
  • Правильно ли понимаю полиморфизм?

    svd71
    @svd71
    Правильно (в смысле ООП). Правда изначально трактовка была немножко другой: возможность передавать в функцию различные типы данных.
    Ответ написан
    Комментировать
  • Почему возвращается только первое совпадение при использование оператора LIKE в mysql?

    svd71
    @svd71
    Потому что имеются две функции: fetch и fetchAll. После первой нужно перемещаться по курсору с помощью функции next. Вторая же вернет все строки из курсора за одно обращерие.
    Ответ написан
  • Что скрывается за понятием сlass в ООП?

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

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

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

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

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

    svd71
    @svd71
    Классы позволяют проводить раширение дочерних элементов только в функционале классов. Интерфейся позволяют также раширять функциональность, но для любых классов. В этом то и главное отличие: Классы можно раширять "вертикально" (каждый потомок может расширить класс), итерфейсы позволяют раширять классы "горизонтально"(интерфейс можно имплементировать в любом классе, даже не имеющими общие предков).
    Ответ написан
    Комментировать