Ответы пользователя по тегу ООП
  • Почему прямоугольник не является экземпляром класса квадрата?

    @ProkletyiPirat
    ПМСМ авторы привели ЖУТКО НЕПРАВИЛЬНЫЙ пример ООП
    Смотрите
    1)квадрат,
    1.1)имеет переменную A="длина сторон"
    1.2)Имеет функцию площади F=(A^2)

    2)прямоугольник
    2.1)имеет переменную A="длина"
    2.2)имеет переменную B="ширина"
    2.3)Имеет функцию площади F=(A*B)

    3)четырёхугольник
    3.1)имеет переменную A="длина стороны 1"
    3.2)имеет переменную B="длина стороны 2"
    3.3)имеет переменную C="длина стороны 3"
    3.4)имеет переменную D="длина стороны 4"
    3.5)имеет угол Q="угол между сторонами 1 и 2"
    3.6)имеет угол W="угол между сторонами 2 и 3"
    3.7)имеет угол E="угол между сторонами 3 и 4"
    3.8)имеет угол R="угол между сторонами 4 и 1"
    3.9)функция высчитывания площади самопересекающегося четырёхугольника(точнее функция высчитывающая площадь с учётом того что четырёхугольник может быть самопересекающимся)

    А вот теперь ВНИМАНИЕ: В каждом из этих объектов есть что-то что не нужно(излишне) другим объектам, ПОТОМУ данные объекты(классы) не могут быть "наследуемыми" друг от друга.

    А как правильно?
    А правильно сделать "интерфейс"("интерфейс" - это название шаблона(паттерна) проектирования) под названием "объект имеющий площадь" в котором объявить функцию "получить площадь" и сделать 2\3\4\N классов которые будут наследовать данный интерфейс и реализовывать данную функцию.

    p.s.Вообще мне в понимании ООП и того "нахрена это нужно" очень сильно помогли статьи на тему паттернов проектирования, и лично я считаю что одно без другого преподавать нельзя.
    Ответ написан
    2 комментария
  • ООП - Как понимать Интерфейсы в java?

    @ProkletyiPirat
    идея
    смотрите, вы создаёте объект "Кнопка" и этот объект может изменять своё состояние (нажата кнопка да\нет это и есть состояние). Другие программисты в других проектах будут использовать ваш объект "Кнопка", и эти программисты хотят что бы при изменение состояния что то происходило. При этом вы не знаете что именно должно происходить во всех этих проектах (это знают только их разработчики).

    как это можно сделать?
    убогая банальщина: вы делаете метод .получитьТекущееСостояние() и другие программисты в каком-то цикле опрашивают вашу кнопку через этот метод, да ещё и хранят предыдущее состояние (надо же с чем то сравнивать). Как видите довольно убого... пользователю-программисту нужно писать кучу кода с проверками и в добавок тратить впустую память и время процессора (то есть программа лагает и жрёт дохрена ресурсов...).

    нормальная реализация: пусть сама кнопка вызывает нужные действия, веть она же знает когда её состояние изменилось. Значит кнопка должна вызывать какую-то функцию но при этом не знать что именно эта функция должна делать. Вот тут и приходят на помощь интерфейсы и паттерны проектирования в данном случае Listeners (aka Observers). Вот как раз OnClickListener это и есть интерфейс. Что касается кнопки то она хранит список объектов которые нужно уведомить при изменении состояния, тип этих объектов "OnClickListener". Таким образом "Кнопке" плевать "что где и как" должно происходить при изменении состояния, но при этом она обеспечивает возможность выполнения этого "что где и как" и при этом гарантирует что не произойдёт ошибки из за отсутствия вызываемого метода.

    ru.wikibooks.org/wiki/Java/Listeners
    citforum.ru/SE/project/pattern
    Ответ написан
    3 комментария