Это правильная / хорошая практика кодирования? - PullRequest
0 голосов
/ 12 июля 2011

Я немного пытаюсь понять всю мощь ОО-программирования. Конечно, я только немного разбираюсь в программировании, я надеялся, что это будет намного проще, чем раньше. Для этого примера я создал некоторый основной код, чтобы определить, является ли это правильным / хорошим способом размещения объектов внутри объектов. Если нет, не могли бы вы направить меня в правильном направлении.

У меня есть 2 класса: класс мальчика и собаки. Класс Boy содержит объект Dog. Объект Dog знает, кто его владелец.

Вот Мальчик класс:

Public Class Boy

Protected mName As String
Public Property Name() As String
    Get
        Return mName
    End Get
    Set(ByVal value As String)
        mName = value
    End Set
End Property

Protected mAge As Integer
Public Property Age() As Integer
    Get
        Return mAge
    End Get
    Set(ByVal value As Integer)
        mAge = value
    End Set
End Property

Protected mReturnHome As New TimeSpan(3, 15, 0)
Public Property ReturnHome() As TimeSpan
    Get
        Return mReturnHome
    End Get
    Set(ByVal value As TimeSpan)
        mReturnHome = value
    End Set
End Property

Protected mPet As New Dog(Me)
Public Property Pet() As Dog
    Get
        Return mPet
    End Get
    Set(ByVal value As Dog)
        mPet = value
    End Set
End Property
End Class

А вот и Собака класс:

Public Class Dog

Private _owner As Boy
Public Sub New(ByRef Owner As Boy)
    _owner = Owner
End Sub

Protected mName As String
Public Property Name() As String
    Get
        Return mName
    End Get
    Set(ByVal value As String)
        mName = value
    End Set
End Property

Protected mBreed As String
Public Property Breed() As String
    Get
        Return mBreed
    End Get
    Set(ByVal value As String)
        mBreed = value
    End Set
End Property

Protected mCanPlay As Boolean
Public Sub PlayBall()
    If Now.TimeOfDay >= _owner.ReturnHome Then
        mCanPlay = True
    Else
        mCanPlay = False
    End If
End Sub
End Class

Мне нужно иметь возможность получить доступ к классу мальчика из класса собаки, потому что собака должна иметь возможность распознавать свойства, характерные для ее владельца (мальчика).

Спасибо.

Ответы [ 2 ]

1 голос
/ 12 июля 2011

Прежде всего, сделайте ваши переменные Private, а не Protected. Для производных классов нет необходимости напрямую обращаться к ним.

Во-вторых, хотя в .NET это делается очень часто, рассмотрите вопрос о том, что у вас не так много сеттеров. Большинство свойств не должны меняться при жизни объекта. Исключение составляют DTO - объекты, которые представляют объекты базы данных.

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

В-третьих, если вашему классу Dog требуется доступ к определенным функциям из класса Boy, проще всего сделать эту конкретную функцию Public.

Наконец, не передавайте владельца собаки через ByRef конструктору. Это работает, но не имеет абсолютно никакого смысла. Используйте ByVal везде, кроме случаев, когда это действительно необходимо (и я утверждаю, что никогда не требуется, есть лучшие решения).

0 голосов
/ 12 июля 2011

Вы на правильном пути, хотя у мальчика и собаки есть несколько общих черт, таких как Имя и Возраст, поэтому теперь вы посмотрите на эти общие атрибуты и методы и создадите базовый класс Animal, из которого и мальчик, и собака вырастут.

ПОСМОТРИТЕ, как вы связываете их вместе - учтите, что у мальчика может быть несколько собак, но у собаки может быть только один владелец, поэтому, вероятно, Boy.Dog должен быть Boy.Dogs (коллекция), но Dog.Owner (как Boy ) абсолютно нормально.

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