想求教一点关于面向对象的一些内容,网上一堆的关于面向对象的内容,但是真正能看懂和理解的能有多少,
小的就在这里把我关于面向对象的理解在这里说下,希望大神们指点一二,看看哪里有问题
求指点啊,
面向对象
有一本书上说一切的物质都可以理解为对象 ,
那么一个人可以理解为一个对象,
有头,有脚,有手,可以理解为属性,自身拥有的内容
面向对象有三个基本特征:继承,封装,多态
多态: 一个人的手可以拿东西,可以扔东西,可以做很多种工作,可以理解为一个事件的多个表现方式
封装:一个人在拿东西的时候,内心会去考虑怎么拿,什么时间,什么情景,这些都是内心的想法,但是我们看到的结果就是这个人拿了东西
继承:父亲会的内容,儿子基本上都会
那么上面的内容 可以用简单代码表示 那么可以表示为
public class person
{
/// <summary>
/// 头
/// </summary>
public string head { get; set; }
/// <summary>
/// 手
/// </summary>
public string hand { get; set; }
/// <summary>
/// 用手去工作
/// </summary>
public void dowordwithhand()
{
Console.WriteLine("用手拿了一件物品");
}
/// <summary>
/// 用手去工作
/// </summary>
public void dowordwithhand(int number)
{
Console.WriteLine("用手拿了{0}件物品",number.ToString());
}
}
那么上面的代码基本上手和头的作用几乎没怎么用到,现在项目中person实体只保留两个属性,方法放到另外一个地方,其实我想说怎么在上面的代码中怎么体现继承,封装,多态 ,以及这样的代码,要怎么去修正比较好
第二个问题,面向对象中使用设计模式的问题
感觉设计模式,就是封装之前要进行的操作,封装可以表示为在做一件事情的时候的很多想法,你看到的只是事情的一个发展过程以及结果,思路要自己去猜测, 设计模式就是一种设计思想,
这点代码上不知道怎么去写比较合适,求大神们指点
------解决思路----------------------
既然一切的物质都可以理解为对象,那么头手也可以看作对象,以手Hands类为例子,左手Lefthand和右手Rigthhand继承自手Hands类,左手和右手又被人所拥有。多态则是,手Hands类里有一个叫做拿getSomeThing的方法,左右手继承自手Hands类,并分别重写getSomeThing方法,左手拿和右手拿,人可以发起用手去工作dowordwithhand,在dowordwithhand可以实例化Hands one = new Lefthand()或者Rigthhand(),然后调用手Hands的getSomeThing方法,便完成左手拿或者右手拿,便是多态。
------解决思路----------------------
基本上,你的理解都是错误的。
封装,最简单的概念就是在运行时“标识唯一”。(同一类型)对象与对象之间是独立的,无关的,因此对应于现实领域的对象的概念。甚至在对象内部有一个this关键字来表示对象自己的这种独立结构。
继承绝对不是指什么“父亲和儿子”的关系。继承是一种概念抽象机制,例如“白马也是马、汽车也是机械、住院病人和门诊病人都是病人”这类概念。那么当我们说“1234号住院病人的x光片”的时候,我们也就是在说“1234号病人的x光片”。按照你的那种“儿子继承父亲”的逻辑,你就是把儿子也说成是他母亲的老公了,就乱伦了。以前有本还不错的关于.net中的许多架构代码讲解的书,里边在最初入门部分竟然用了一章的内容来说什么“好爸爸、坏爸爸”的例子,举例说“儿子继承父亲的遗产”的概念来说明面向对象中的继承概念,这就是这本书中最大的败笔,也就是在讲一些个别的代码时还不错,可惜最基本的概念(将会影响大量实际的设计模型)部分是误导了。
继承与多态是“一个硬币的两面”,是相辅相成的。既然一个对象可以具有多重类型(包括多重继承类型以及多重的接口),那么它就应该代入不同的操作中。例如一个“住院部病人1234”可以放入任何一个专为“病人”而设计的流程中,例如放入“医保处理”的流程中。反过来说,将来新设计某种新的“病人”,设置更具体地是某种新的“住院部病人”,那么也都应该可以代入针对病人的任何程序中。因此一个“输入参数”声明为病人的方法,就具有多态性,可以接受任何子类(或者含有此接口)的对象实例作为参数。