Я новичок в дизайне OO и существует один из принципов SOLID - это принцип LISKOV Substitution.Эффективный дизайн OO
Но в моем проекте у меня есть классы с именем StartCommunicationMessage, ContinueCommunicationMessage, EndCommunicationMessage, AbortCommunicationMessage.
StartCommunicationMessage содержит: commID, qualityOfCommunication, DestAddr, origAddr EndCommunicationMessage содержит: commID, qualityOfCommunication, DestAddr ContinueCommunicationMessage содержит: commID, qualityOfCommunication, DestAddr, origAddr AbortCommunicationMessage содержит: commID, DestAddr
Так что я могу сделать сделать родителем для всех этих сообщений называется CommunicationMessage, который содержит: commID, DestAddr
Но qualityOfCom сообщение не найдено в Abort, поэтому оно будет повторяться так же, как и getter и setter во всех других классах, которые делают дублирование.
Есть ли способ уменьшить это дублирование либо путем нарушения вышеуказанного правила, либо чего-либо еще?
Как всегда бывает с такими вопросами ООП, все зависит от того, как клиенты будут использовать базовый класс. Если у меня есть код, который имеет «CommunicationMessage &», как он должен взаимодействовать с этим экземпляром? Клиенты знают о таких вещах, как идентификатор или качество? Должны ли клиенты напрямую писать и читать эти значения? Хороший дизайн ООП - это, прежде всего, хороший дизайн интерфейса, а хороший дизайн интерфейса - это «как другие будут использовать это?». –
@ChristianHackl: Да, у вас есть моя точка зрения, да, клиенты будут знать об этих полях, а также некоторые из них необязательны. –
Клиенты не должны знать поля, но только функции-члены. Поля (aka «переменные-члены» на C++) должны быть почти всегда «частными». –