您的位置:首页 > 其它

【设计模式】面向对象基础

2015-01-09 20:56 281 查看
     最近一直在学习《大话设计模式》根据师傅对我的指导,让我先学习这本书的附录——面向对象基础。说实在话,面向对象技术从很早就接触了,从刚开始的C++,其次是软工视频,然后是UML,紧接着是C#,直到现在的设计模式。。

     总的来说,在设计模式之前,我对面向对象的了解还只是停留在封装、继承、多态的层次上,虽然在C#视频中,有全面的讲解了一下,但是自己还是晕晕乎乎的,脑子中还是有很多疑云。。直到这次的设计模式,通过通过幽默生动、而又通俗易懂的故事,对面向对象技术深入浅出,我才算是真正的入门了。。

     这篇博客的主要内容,是面向对象的基础知识。首先,我要罗列一下书中故事的内容:

     目的:实现“动物运动会”

     “猫叫”——————————“喵”的提示框———————————类的作用

     起名字——————————“名字”提示框———————————构造函数

     当没有名字时———————“无名”提示框———————————方法重载

     猫叫次数—————————“喵。。”的提示框—————————属性与修饰符(房子的比喻)

     猫叫转变为狗叫———————————————————————类的封装

     猫与狗都是动物——————动物类——————————————继承

     举办“叫声比赛”——————“动物报名”————————————数组、多态

     Shout方法—————————只是声音不同——————————重构(再抽象)

     动物类不能实例化——————————————————————抽象类

     叮当、孙悟空“变东西”———特殊行为—————————————接口

     “动物报名”数量——————用数组,最多五个————————集合的作用

     什么对象都接受——————类型不安全——值类型装、拆箱——泛型

     听见猫叫,老鼠就跑—————————————————————委托与事件,及其关系
     通过以上的罗列,让我对所学的内容,在故事的引导下,使知识更有联系性。。

     下面,是我面向对象知识的罗列:

     类与实例

     对象:是一个自包含的实体,用一组可识别的特性和行为来识别。我们所看到的、感觉到的、听到的任何东西都可以是对象。对象的实例化就是指出具体的东西。。

     类:是具有相同属性和功能的对象,进行抽象的集合。

     构造方法

     又叫构造函数,其实就是对类进行初始化。构造函数与类同名,无返回值,不需要void,在new时候调用。

     方法重载

     提供了创建同名的多个方法的能力。方法重载时,两个方法必须要相同名称,但参数类型或个数必须要有所不同,否则重载就没有意义了。

     重载的好处是,可在不改变原方法的基础上,新增功能。

     属性与修饰符

     字段是类为满足其设计所需要的数据,字段都是私有变量,属性都是共有变量。

     属性中有两个方法get、set。get表示外界调用时,可以得到内部字段的值;set表示外界可

     以给内部字段赋值,它没有显示设置参数,但有一个隐式参数,用关键字value表示。

     封装

     好处:1、良好的封装能减少耦合

                 2、类内部的实现可以自由修改

                3、使类具有清晰的对外接口

     继承

     如果子类继承父类,1、拥有父类非private的属性和方法

                                         2、可扩展父类没有的属性和方法

                                         3、以自己的方式实现父类的方法(方法重写)

                                         4、不能继承构造函数,只能调用

                                         5、调用父类成员,可用base关键字

     重构

     改善既有代码的设计

     多态

     表示不同的对象可以执行相同的动作,但要通过自己的代码来实现。

     特点:1、子类以父类的身份出现

                 2、子类在执行时,以自己的方式来实现

                 3、子类以父类的身份出现时,子类特有的属性和方法不可以使用

     抽象类

     将不能实例化的类定义为抽象类,加关键字abstract

     特点:1、不能实例化

                 2、抽象方法是必须被子类重写的方法

                 3、如果类中包含抽象方法,那么类必须定义为抽象类

     接口

      使用:1、不能实例化,不能有构造函数和字段

                  2、接口,以及它的属性和方法,都不能有修饰符

                  3、不能声明虚拟或静态

                  4、实现接口的类必须实现接口中的所有方法和属性

                 5、一个类可支持多个接口,多个类也可以支持相同的接口

                 6、接口的命名,前面要加一个大写的字母“I”

     与抽象类的区别:1、抽象类可以有成员的实现,接口没有

                                        抽象类的抽象成员可被子类,部分实现;接口的成员要完全实现

                                        一个类只能继承一个抽象类,但可实现多个接口

                                     2、类是对对象的抽象;抽象类是对类的抽象;接口是对行为的抽象

                                     3、抽象类是从子类中发现公共的东西,泛化出父类;接口是根本不知道子类的存在,方法如何实现还不确定,预先定义。(抽象类是自底而上,接口是自顶向下)

     集合

     .NET Framework提供了用于数据存储和检索的专用类,这些类统称为集合。这些类提供对堆栈、列队、列表和哈希表的支持。大多数集合类实现相同的接口。

     现在最常用的是ArrayList。它是命名空间System.Collections下的一部分,它是使用大小可按需动态增加的数组实现IList。

     好处:1、根据使用大小,按需动态增加

                 2、可随意添加、插入或移除某一范围的元素

     缺点:1、集合类型不安全,不管是什么类型的对象都能接受。

                 2、ArrayList对于存放值类型的数据,比如int、string等,用ArrayList就意味着都需要将值类型装箱为Object对象,当使用时,还需要执行拆箱操作,这就带来了很大的性能损耗

     泛型

     泛型能很好地解决集合所出现的问题。泛型是具有占位符(类型参数)的类、结构、接口和方法,这些占位符是类、结构、接口和方法所存储或使用的一个或多个类型的占位符。泛型集合类可以将类型参数用作它所存储的对象的类型的占位符;类型参数作为其字段的类型和其方法的参数类型出现。

     泛型集合需要System.Collections.Generic命名空间,用List替换ArrayList。该类使用大小,可按需动态增加的数组实现IList泛型接口。

     List和ArrayList在功能上是一样的,不同就在于,它在声明和实例化时都需要指定其内部项的数据或对象类型,这就避免了刚才讲的类型安全问题和装箱拆箱的性能问题。

     委托与事件

     委托是对函数的封装,可以当作给方法的特征指定一个名称。而事件则是委托的一种特殊形式,当发生有意义的事情时,事件对象处理通知过程。

     委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。

     委托对象用关键字delegate来声明;而事件是说在发生其他类或对象关注的事情时,类或对象可通过事件通知它们。事件对象用event关键字声明。

     小结

     以上的所有都是我对知识的罗列,虽然是罗列,但都是基础。所谓的学习就是在知识的基础上,不断地对知识进行总结,融入自己的生活和知识网。

     所以说,我非常赞同米老师对于学习的理解。就学习本身而言,它是一项非常简单的事情:罗列知识点——总结知识——实践——再总结,我们要不断地循环这条知识链,在这期间要使用米老师的学习方法和时间管理思想。

     我想,真正难的是自身的执行力和毅力,这是我的弱点,也是我进步的必要元素。。下一篇文章《【设计模式】面向对象小结——重写与重载》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息