【问题标题】:OOP: what goes where and sharing the state between objectsOOP:什么去哪里以及在对象之间共享状态
【发布时间】:2015-02-17 19:17:51
【问题描述】:

我正在深入研究 OOP。仍然很难理解“如何做”。我有以下基本示例。

我有一只狗,他住在一所房子里。所以这里我有两个类。

class House
{
    private string _name;

    public string Name
    {
        get { return _name; }
    }

    public House(string name)
    {
        _name = name;
    }
}

这所房子有“雷克斯之家”、“狗屋”之类的名字,它对住在里面的狗一无所知。

class Dog
{
    private string _name;
    private House _house;

    public string Name
    {
        get { return _name; }
    }

    public string House
    {
        get { return _house.Name; }
    }

    public Dog(string name, House house)
    {
        _name = name;
        _house = house;
    }
}

狗一出生就有名字和房子。

class Program
{
    static void Main(string[] args)
    {
        var house = new House("Dog house");
        var dog = new Dog("Rex", house);
    }
}

假设狗现在大了,你告诉他去房子,因为他很坏。

我应该在 Dog 类中实现一个名为 GoIntoTheHouse() 的方法吗?

但是如果在那一刻其他狗占领了房子并且房子已经满了怎么办?应如何以及在何处保存此状态?

除此之外:

也许有某种资源可以通过这种现实世界的例子来学习 OOP?

【问题讨论】:

  • 我个人认为狗窝的入住是狗窝而不是狗的责任,所以我会让狗窝拥有 Dog 属性而不是 Dog 拥有 House 属性。如果您有多个狗窝,您可以将它们添加到一个集合中,例如 List<House>。然后,如果有一只新的狗出生了,你想给它找房子,你可以查询收藏免费狗屋var house = houses.FirstOrDefault(h => h.Dog == null);
  • 我强烈推荐阅读The Object Oriented Thought Process
  • 我想推荐Clean Code。它与 OOP 无关,但它确实为您提供了一些关于如何构建代码的相当好的想法,例如哪些类实际上应该具有哪些职责。

标签: c# class oop


【解决方案1】:

严格根据您的示例,如果房子一次只能养一只狗,但任何狗都可以进入房子,您希望将 Dog 作为房子的财产,而不是您目前拥有的财产。

【讨论】:

    【解决方案2】:

    有很多方法可以设计您的问题,但是对于“您应该实现一个方法”的问题,是的,您应该这样做,因为它已经是一个动作/行为,对于一个类(或者我应该说的对象)需要每当它被告知时就完成。

    O'reilly 是一本很好的编程书籍。 http://www.oreillyschool.com/individual-courses/intro-oop/

    但是如果你不想买书http://www.c-sharpcorner.com/UploadFile/84c85b/object-oriented-programming-using-C-Sharp-net/这里也是一个很好的参考

    【讨论】:

      猜你喜欢
      • 2010-11-12
      • 2017-08-04
      • 2018-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-04
      相关资源
      最近更新 更多