Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OOP in VB.NET - Child, Parent, Parents

Tags:

oop

vb.net

I'm trying to do something here with VB that I guess I'm not understanding how to do it exactly. Sorry I'm not that good at OOP.

I have a number of things I'm creating and they have two values - parent name and child name (yes, actual people!).

So it would be like this:

Public Class Child
    Public Property ParentName As String
    Public Property ChildName As String
End Class

And then:

Public Class Parent
    Public Property ParentName As String
    Public Property ChildName() As String
End Class

Then I need to add these to a Parents class where a Parent can have one or more children.

I start by adding a Child. If that child's Parent name already exists, just add the Child's name to that parent, but if it doesn't exist, create a new parent (with that child). Then add all parents to a collection of parents (with their 1 or more children).

A resulting list would look something like this:

Parents:

  1. Parent: Jonathan Murry
    1. Child: Carl Murry
  2. Parent: Kathleen Anderson
    1. Child: Steven Anderson
    2. Child: Deborah Anderson
    3. Child: Thomas Anderson
  3. Parent: Xu Jing
    1. Child: Liu Ming
    2. Child: Liu Ning

(note on the last one - the parent/child last names don't need to match - in this case, the children take the father's last name instead of the mother's, but we don't list the father).

How would I create these type of classes so that I can add children to a parent, add a parent to parents and then ensure it is querable with something like Linq?

Thx in advance.

like image 627
Stan Avatar asked Sep 03 '10 20:09

Stan


1 Answers

Since all of them are persons, perhaps there should instead be a Person class. Each person may a Mother, a Father and a collection of Children. That way you can create graphs over several generations and with all sorts of constellations.

Public Class Person
    Public Property Name As String
    Public Property Mother As Person
    Public Property Father As Person
    Public Property Children As List(Of Person)
End Class

Update
Here is a fuller (and somewhat reworked) example that perhaps can help to shed some light:

The Person class, slightly changes (replaced Mother / Father with Parent, made the Children property `ReadOnly´)

Public Class Person
    Public Property Name As String
    Public Property Parent As Person
    Private _children As New List(Of Person)

    Public ReadOnly Property Children As List(Of Person)
        Get
            Return _children
        End Get
    End Property

End Class

And a sample program creating a Person list, and posing a LINQ query.

Module Program
    Sub Main()
        Dim persons As IEnumerable(Of Person) = GetPersonGraph()
        Dim jonathansChildren As IEnumerable(Of Person)
        jonathansChildren = persons.Where(Function(p) _
                                Not p.Parent Is Nothing _
                                AndAlso p.Parent.Name = "Jonathan Murphy")

        For Each child As Person In jonathansChildren
            Console.WriteLine(child)
        Next
    End Sub


    Function GetPersonGraph() As IEnumerable(Of Person)
        Dim result As New List(Of Person)
        Dim parent As Person
        Dim child As Person

        parent = New Person()
        parent.Name = "Jonathan Murphy"
        result.Add(parent)

        child = New Person()
        child.Name = "Carl Murry"
        child.Parent = parent
        parent.Children.Add(child)
        result.Add(child)

        Return result
    End Function
End Module
like image 169
Fredrik Mörk Avatar answered Oct 25 '22 22:10

Fredrik Mörk