专注

导航

随笔分类 -  面向对象基础

面向对象基础-里氏代换原则
摘要:里氏代换原则是说:一个软件实体如果使用的是一个父类的话,那么一定适用其子类,而且他察觉不出父类对象和子类对象的区别,也就是说,在软件里,把父类都替换成他的子类,程序行为没有变化。 上面的例子说明:只有当子类可以替换掉父类,软件单位的功能不受到影响是,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。 阅读全文

posted @ 2011-11-13 12:47 陈啊M 阅读(209) 评论(0) 推荐(0)

面向对象基础-依赖倒转原则
摘要:有些地方翻译成:依赖倒置原则。原话的解释是:抽象不应该面向依赖细节,细节应该依赖于抽象。说白一点就是:我们在设计代码的时候,要做到面向接口编程,不要对实现编程。依赖倒装原则有两层意思:1、高层模块不应该依赖低层模块。两个都应该依赖抽象;2、抽象不应该依赖细节,系统应该依赖抽象。那什么是倒转呢?我们在面向过程的开发时,为了使得常用的代码可以复用,一般都会把这些常用的代码写成很多函数的程序库,这样子在做新的项目时,去调用这些低层的函数库就可以了,比如,我们做访问数据库的操作,我们可以把这些方法写在一个函数或者类里面,以后有新的项目的时候,只需要把这些函数或类直接来过来用,这就是高层依赖低层模块。 阅读全文

posted @ 2011-11-13 12:46 陈啊M 阅读(287) 评论(0) 推荐(0)

面向对象基础-开放封闭原则
摘要:开放封闭原则:软件实体(类、模块、函数等等)应该是可以扩展的,但是不可以修改。我们在做系统的时候,都希望希望一开始时需求确定,以后就不需要修改了,但是这似乎不太科学,出现了变化,我们要如何去做呢?也就是说,怎么设计才能面对需求的变化却可以保持相对的稳定,从而使得系统可以在第一个版本以后不断推出新的版本呢?这就是我要说,在设计的时候需要遵循的开放封闭原则。封闭:按照我的理解是我们把对象封装成一个类,或者把一些算法封装成一个个函数。这个时候,开发者对于对象来说是封闭的,我们并需要了解具体的类、函数是如何实现,但是无论你的模块、类、函数是多么的封闭,都会存在一些无法对之封闭的变化,既然不可能完全封闭 阅读全文

posted @ 2011-11-13 12:45 陈啊M 阅读(162) 评论(0) 推荐(0)

面向对象基础-委托与事件
摘要:首先举一个实例:创建一个控制台程序,需求是:有一只猫Tom,有两只老鼠Jerry和Jack,Tom只叫一声“喵,我是Tom”,两只老鼠就说“老猫来了,快跑”,我们来分析一下:我们需要Cat和Mouse类两个类,当Cat的Shout方法触发的时候,Mouse就执行Run方法,不过这里如何让Shout触发式,通知两只老鼠呢?显然老猫不会通知老鼠“我来了,你们快跑”。所以,我们在Cat类中,不应该关联Mouse类的。这个时候,委托事件就是最好的处理方法了。委托是对函数的封装,可以当作方法的特征指定一个名称。而事件则是委托的一种特殊形式,当发生有意义的事件时,时间对象处理通知过程。委托是一种引用方法的 阅读全文

posted @ 2011-11-13 12:42 陈啊M 阅读(196) 评论(0) 推荐(0)

面向对象技术-泛型
摘要:泛型在msdn上定义比较难懂。泛型是具有占位符(类型参数)的类、接口、接口和方法,这些占位符是类、接口、结构和方法所存储的一个或多个占位符。泛型集合类可以将类型参数用作他所存储对象的类型的占位符,类型参数作为其字段的类型和其方法的参数类型出现。我们看一个实例:泛型需要添加using System.Collections.Generic的命名空间;而List类是ArrayList类的泛型的等效类,该类使用大小可以按需动态增加的数组是想IList泛型接口。其实用法上关键就是在IList和List后面加<T>,这个T就是你需要指定的集合的类型或对象类型。 1: //关键在这里,... 阅读全文

posted @ 2011-11-13 12:39 陈啊M 阅读(232) 评论(0) 推荐(0)

面向对象基础-集合
摘要:我们在动物比赛报名的时候,是这样子做的: 1: private Animal[] arrayAniaml; 2: private void button2_Click(object sender, EventArgs e) 3: { 4: arrayAniaml = new Animal[5]; 5: arrayAniaml[0] = new Cat("mao1"); 6: arrayAniaml[1] = new Dog("... 阅读全文

posted @ 2011-11-13 12:37 陈啊M 阅读(184) 评论(0) 推荐(0)

面向对象基础-接口
摘要:在动物比赛中有一个比较特殊的比赛是为了给特异功能的动物展示其特殊的才能的。比如:机器叮当猫,石猴孙悟空,肥猪猪八戒,蜘蛛人等等。 变出东西应该是叮当猫、孙悟空、猪八戒的行为方法,要想用多态,就得让猫、候、猪都有“变出东西(特异功能)”能力,而为了具有普遍意义,干脆让动物都具有“变出东西(特异功能)”等行为,但是,我们发现,不是所有动物都具有“变出东西(特异功能)”的能力。只有Cat/Pig/Monkey有,这个时候,我们就会用到接口。 当然也可以是这样子 还有一种形式 一个类可以支持多个接口,多个类也可以支持相同的接口。所以,我们可以声明一个接口: 1: in... 阅读全文

posted @ 2011-11-13 12:35 陈啊M 阅读(186) 评论(0) 推荐(0)

面向对象基础-抽象类
摘要:我们再来观察,其实Animal类其实根本不可能实例化,你想,说一只猫长什么样子,可以想象,但是new Animal(),即实例化一个动物,动物长什么样子,其实是不知道的。同样的道理,Animal中的getShoutSound()方法,也是没有任何含义的,所以,我们可以把virtual修饰符改成abstract,使之成为抽象的方法。C#中允许把类和方法声明为abstract,即抽象类和抽象方法。 1: abstract class Animal 2: { 3: ............... 4: protected abstract string ge... 阅读全文

posted @ 2011-11-13 12:30 陈啊M 阅读(137) 评论(0) 推荐(0)

面向对象基础-重构
摘要:动物中如果又有小牛,小羊来报名,需要参加“叫声比赛”,如何办?原始的方法只要继承即可。 但是,我们会发现,Cat、Dog、Bull,Sheep中除了构造方法Shout()之外,几乎没有什么差异。这样子的不好使,比如把shout()中的“我的名字是**”改成“我叫**”,那么四个类都需要改变。这个时候,我们需要这样子做了。我们还是要把Shout()放到Animal类中,但是现在就不是virtual的了。此外,我们还需要添加一个getShoutSound()的方法,表示判断是“喵”还是“旺”。 1: class Animal 2: { 3: .... 阅读全文

posted @ 2011-11-13 12:28 陈啊M 阅读(255) 评论(0) 推荐(0)

面向对象基础-多态
摘要:还是动物的例子,如果我们现在要举办一个动物运动会,来参加的有各种各样的动物,其中有个项目是“叫声比赛”。界面上放放两个按钮,一个是“动物报名”,就是确定动物的种类和报名的顺序,一个就是“叫声比赛”,就是报名的动物挨个交出声音来比赛。注意来报名的各种动物,我们不知道,可能是猫,狗.......如何实现?如果按照多态的含义:表示不同的对象可以执行相同的动作,但要通过他们自己的实现代码来执行。为了使子类的实例化完全接替来自父类的类成员,父类必须将该成员声明为虚拟的,这是通过在该成员的返回类型之前添加virtual关键字来实现。子类可以通过override关键字,将父类实现替代为他自己的实现,这就是方 阅读全文

posted @ 2011-11-13 12:25 陈啊M 阅读(249) 评论(0) 推荐(0)

面向对象基础二-继承
摘要:一、封装封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。每个对象都包含能进行操作所需要的所有信息,这个特性就是封装,因此对象不必依赖其他对象来完成工作。二、继承对象继承就是is-a的关系。如果子类继承父类,那么(1)子类拥有父类非private的属性和功能;(2)子类具有自己的属性和功能,即子类可以扩展父类没有的属性和功能;(3)子类还可以以自己的方式实现父类的功能(方法重写)还是以动物为了,我们如果要创建一个狗叫“旺”的提示框,最原始的做法就是和Cat类几乎一样的创建一个Dog的类,但是,我们发现里面大部分代码都是一样的,所 阅读全文

posted @ 2011-11-13 12:23 陈啊M 阅读(182) 评论(0) 推荐(0)

面向对象基础一
摘要:一、类与实例首先我做一个实验,点击一个“猫叫”的按钮,会弹出小猫的叫声“喵”的提示框!这个实在很简单 MessageBox.Show("喵"); 问题一:如果需要点击另外一个按钮,也让他弹出小猫的叫声“喵”的提示框!解决方法:增加一条语句:MessageBox.Show("喵");问题:这样子就会重复了,解决方法:我们需要些一个函数,其他需要的地方直接调用。 1: string Shout() 2: { 3: return "喵"; 4: } 问题:如果别的窗口要用的话,怎么办?解决:public string Shout()但是,S 阅读全文

posted @ 2011-11-13 12:20 陈啊M 阅读(212) 评论(0) 推荐(0)