Название: Введение в объектно-ориентированный дизайн с Java
Автор: Тимур Машнин
Издательство: Автор
Жанр: Компьютеры: прочее
isbn:
isbn:
Обобщение и наследование являются одной из наиболее сложных тем в объектно-ориентированном программировании и моделировании.
Наследование – это мощный инструмент проектирования, который помогает создавать понятные, многоразовые и поддерживаемые программные системы.
Однако неправильное наследование может привести к плохому коду.
Это происходит, когда принципы проектирования используются ненадлежащим образом, создавая больше проблем, хотя они предназначены для их решения.
Итак, как мы можем понять, злоупотребляем ли мы наследованием?
Есть несколько моментов, о которых нужно знать, когда рассматривается наследование.
Во-первых, вам нужно спросить себя, пользуюсь ли я наследованием, чтобы просто использовать общие атрибуты или поведение, не добавляя ничего особенного в подклассы?
Если ответ «да», тогда вы неправильно используете наследование.
Это является признаком неправильного использования, потому что нет никаких оснований для существования подклассов, так как суперкласса уже достаточно.
Скажем, вы проектируете ресторан пиццы. И вам нужно смоделировать все различные варианты пиццы, которые есть у ресторана в меню.
Учитывая различную комбинацию начинок и названий, которые вы можете использовать для пиццы, может возникнуть соблазн разработать систему, использующую наследование.
И класс пиццы может обобщен.
Это кажется разумным, но давайте посмотрим, почему это является неправильным использованием наследования.
Несмотря на то, что пицца pepperoni – более специфическая пицца, она не очень отличается от суперкласса.
Вы можете видеть, что конструктор pepperoni использует конструктор пиццы и добавляет начинки, используя метод суперкласса.
В этом случае нет причин для использования наследования, потому что вы можете просто использовать только класс пиццы для создания пиццы с пепперони в качестве верхней части.
Второй признак ненадлежащего использования обобщения – если вы нарушаете Принцип Замещения Лискова.
Принцип гласит, что подкласс может заменить суперкласс, тогда и только тогда, когда подкласс не изменяет функциональность суперкласса.
Как этот принцип может быть нарушен через наследование?
Давайте посмотрим на этот пример.
Это наш обобщенный класс животных, и он знает, как есть, гулять и бегать.
Теперь, как мы можем ввести подкласс, который нарушит принцип замещения Лискова?
Что, если у нас есть этот тип животных?
Кит не знает, как гулять и бегать.
Гулять и бегать – это поведение наземных животных.
И принцип СКАЧАТЬ