【发布时间】: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); -
我想推荐Clean Code。它与 OOP 无关,但它确实为您提供了一些关于如何构建代码的相当好的想法,例如哪些类实际上应该具有哪些职责。