Контакты

Наибольший вклад в теги

Все теги (3)

Лучшие ответы пользователя

Все ответы (4)
  • В каком случае лучше использовать абстрактный класс, а в каком интерфейсы?

    @gbondarchuk
    Software Engineer
    Just wanted to summarize previous answers:

    Интерфейс - это просто список методов, то есть в нем мы определяем что будут делать наши методы. Как черный ящик: отдаем входные данные и получаем результат, абстрагируясь от того, как будет получен результат.
    Обычный класс (реализация интерфейса) - здесь мы определяем как будут работать наши методы.
    Абстрактный класс - часть методов абстрактные, т.к. мы не может определить на данном этапе как они будут выполняться, другая часть - обычные методы. Используется в следующих ситуациях:
    Пусть у нас есть интерфейс и несколько его реализаций (обычных классов): в интерфейсе будет описан метод для вычисления определенного интеграла Римана а также метод для определения точности результата. Реализаций несколько: метод прямоугольников, метод трапеций, метод Монте-Карло. Создадим 3 обычных класса для 3-х методов, унаследуем эти класса от интерфейса. После реализации можно заметить, что метод для определения точности результата дублируется во всех 3-х классах, следовательно он может быть вынесен на предыдущий уровень иерархии: создаем абстрактный класс унаследованный от нашего интерфейса, реализуем в нем второй метод, а первый оставляем не реализованным (абстрактным). При добавлении нового метода вычисления нам уже не нужно беспокоиться о реализации метода определения точности результата.

    Также используется для предотвращения создания объектов данного типа. Если класс объявлен как абстрактный мы не можем создать объект new AbstractClass();

    Таким образом абстрактный класс является прослойкой в иерархии между выше стоящим интерфейсом и ниже стоящими реализациями.
    Ответ написан
    3 комментария
  • На какой улице (`Street`) больше домов?

    @gbondarchuk
    Software Engineer
    select count(*), Street from Table GROUP BY Street ORDER BY count(*) desc limit 1;
    Ответ написан
    Комментировать
  • MySQL. Как посчитать кол-во созданных тем в определённой категории форума?

    @gbondarchuk
    Software Engineer
    select category.name, count(*) as "topics" from forum_topics topic left join forum_categories category on category.id = topic.category_id group by topic .category_id;

    Если нужна вложенность - то сначала ищешь все category_id по которым нужен поиск а потом используешь where topic.category_id in (id1,id2...)
    Ответ написан
    Комментировать