Запах кода 137 — Слишком глубокое дерево наследования

Еще один плохой симптом повторного использования кода

TL;DR: Отдайте предпочтение композиции, а не наследованию

Проблемы

  • Сцепление

  • Подклассификация Повторное использование

  • Плохая связность

  • Хрупкие базовые классы

  • Переопределение методов

  • Замещение Лискова

Решения

  1. Разбейте классы и составьте их.

Контекст

В старых статьях рекомендовалось использовать классы в качестве специализации для повторного использования кода.

Мы узнали, что композиция является более эффективным и расширяемым способом разделения поведения.

Образец кода

Неправильный

classdef Animalia

end

classdef Chordata < Animalia 

end

classdef Mammalia < Chordata 

end

classdef Perissodactyla < Mammalia 

end

classdef Equidae < Perissodactyla  

end

classdef Equus < Equidae 
//Equus behaviour
end

classdef EFerus < Equus
//EFerus behaviour
end

classdef EFCaballus < EFerus
//EFCaballus behaviour    
end


Вход в полноэкранный режим Выйти из полноэкранного режима

Правильно

classdef Horse       
    methods        
      // Horse behavior       
    end    
end
Войти в полноэкранный режим Выход из полноэкранного режима

Обнаружение

[X] Автоматическое

Многие линтеры сообщают о глубине дерева наследования (DIT).

Теги

  • Иерархии

Заключение

Следите за своими иерархиями и часто разбивайте их.

Отношения

Code Smell 11 — Подклассификация для повторного использования кода

Maxi Contieri ・ Oct 30 ’20 ・ 2 min read

#oop #codenewbie #учебник

Code Smell 43 — Субклассификация бетонных классов

Maxi Contieri ・ Dec 5 ’20 ・ 1 min read

#oop #codenewbie #tutorial #webdev

Запах кода 58 — Проблема йо-йо

Maxi Contieri ・ Jan 24 ’21 ・ 2 min read

#codenewbie #codesmell #учебник #webdev

Code Smell 37 — Защищенные атрибуты

Maxi Contieri ・ Nov 29 ’20 ・ 2 min read

#oop #webdev #tutorial #codenewbie

Запах кода 125 — Отношения ‘IS-A’

Maxi Contieri ・ Mar 26 ・ 3 min read

Дополнительная информация

  • Сцепление: Единственная и неповторимая проблема

  • Википедия


Программные сущности (классы, модули, функции и т.д.) должны быть открыты для расширения, но закрыты для модификации.

Бертран Мейер

Программная инженерия Великие цитаты

Maxi Contieri ・ Dec 28 ’20 ・ 13 min read

#codenewbie #программирование #цитаты #программное обеспечение

Эта статья является частью серии CodeSmell.

Как найти зловонные части вашего кода

Maxi Contieri ・ May 21 ’21 ・ 7 min read

#codenewbie #учебник #качество кода #новички

Оцените статью
Procodings.ru
Добавить комментарий