Подкласс или собственность? - PullRequest
0 голосов
/ 08 ноября 2018

Я совершенно новичок в программировании ОО. Я строю класс в VB.NET, и я хочу, чтобы свойства были сгруппированы в определенных категориях. Должны ли категории быть объявлены как подкласс или как свойство? Другими словами, какой из двух подходов лучше?

Class Tree
    Property Trunk As Trunk
    Property Leaves As Leaves
End Class

Class Trunk
    Property Color As String
    Property Diameter As Integer
End Class

Class Leaves
    Property Color As String
    Property Width As Integer
    Property Height As Integer
End Class

или

Class Tree
    Class Trunk
        Property Color As String
        Property Diameter As Integer
    End Class
    Class Leaves
        Property Color As String
        Property Width As Integer
        Property Height As Integer
    End Class
End Class

В обоих случаях я буду использовать экземпляр Tree с чем-то вроде myTree.Trunk.Color = "Red", но какой из них считается наилучшим?

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 09 ноября 2018

Это зависит от повторного использования, которое вы хотите иметь. В вашем примере первый подход позволяет вам использовать классы Trunk и Leaves для другого класса, например, цветка.

Class Flower
    Property Trunk As Trunk
    Property Leaves As Leaves
End Class

Class Tree
    Property Trunk As Trunk
    Property Leaves As Leaves
End Class

Конечно, вы можете повторно использовать внутренние классы (ваш второй пример), однако вам, возможно, придется настроить области и в больших проектах, которые могут усложнить ситуацию. В любом случае, если вы следуете второму подходу, класс Flower должен быть объявлен как следующим образом:

Class Flower
    Property Trunk As Tree.Trunk
    Property Leaves As Tree.Leaves
End Class

Вы видите разницу.

Еще одна вещь, которую вы должны иметь в виду, это наследование. В вашем примере вы можете объявить класс завода следующим образом:

Class Plant
    Class Trunk
        Property Color As String
        Property Diameter As Integer
    End Class
    Class Leaves
        Property Color As String
        Property Width As Integer
        Property Height As Integer
    End Class

    Property Trunk As Trunk
    Property Leaves As Leaves
End Class

И тогда вы можете наследовать его от другого класса или классов:

Class Tree
    Inherits Plant
    'extra tree properties here
End Class

Class Flower
    Inherits Plant
    'extra flower properties here
End Class

Таким образом, классы Tree и Flower будут иметь свойства Trunk и Leaves:

Tree.Trunk.Color
'...
Flower.Leaves.Width

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...