面向对象编程基础

来源:互联网 发布:有后台手机导航php源码 编辑:程序博客网 时间:2024/05/21 23:33

    熬呀熬,熬呀熬,多年的媳妇熬成婆,设计模式附录经过学习终于有了些眉目,结出了这篇博客。

    第一遍看,哇塞,原来这个东西是这个意思,呀呼,原来那个东西这么简单…所有的知识看一眼就掌握了;第二遍看,隔了很长时间,因为考试,设计模式的学习中断了好久,不过朝花夕拾,依旧不费力,理解的更加深刻;第三遍看,走马观花,运用到实践中,这部分知识就变成了过去式,已然成为旧知识。

    

    第一讲:类与实例

    主要知识点:一切事物皆对象,对象就是看得见、摸得着、可以觉察到的东西,准确的说,对象是一个自包含的实体,用一组可识别的特性和行为来标识,类就是具有相同属性和功能的对象的抽象的集合,类名称首字母大写,多个单词组成的类名则各个首字母大写,实例就是一个真实的对象,实例化就是创建对象的过程。

    实例:客户端程序,点击按钮,弹出消息提示框,将窗体方法设置为公有不如声明新类Cat


    第二讲:构造方法

    主要知识点:与类同名,无返回值,不需要void,对类进行初始化(new时)调用

    实例:定义了有参数的构造方法

    public Cat(string name){this.name=name} 

    这样在客户端生成小猫时,就必须起名字

    Cat cat=new Cat("咪咪")


    第三讲:方法重载

    主要知识点:提供创建同名的多个方法的能力,但参数类型或个数要有所不同;它是在不改变原方法的基础上,新增了功能,扩展了函数的能力;普通方法也可以重载

    实例:事先没有给小猫起名字,编写无参数的构造方法


    第四讲:属性和修饰符

    主要知识点:属性是一个方法或一对方法,但在调用它的代码看来,它是一个字段,即属性适合以字段的方式被方法调用的场合;字段是用来存储要满足类的设计所需要的数据,字段是与类相关的变量;通常字段是私有的,而属性都是public;变量私有的叫字段、公有的叫属性;set访问器没有显式设置参数,但它有一个隐式参数,用关键字value表示,它的作用是调用属性时可以给内部的字段或引用赋值;get访问器返回与声明的属性相同的数据类型,表示调用时可以得到内部字段的值或引用;属性操控字段,限制其读写对外界公开的数据,我们通常希望能做到更多的控制,有利于封装

    实例:可以控制返回的猫的叫声,并在其他类或窗体可以调用该属性


    第五讲:封装

    主要知识点:好处:1.良好的封装能够减少耦合 2.类内部的实现可以自由的修改 3.类具有清晰的对外接口

    实例:提炼出猫Cat类,房子和门窗以及房子内的物件的与类的对应关系


    第六讲:继承

    主要知识点:对象的继承代表了一种“is a”的关系,如果对象A和B可以描述为B是A,就表明B可以继承A;继承者可以完全替换被继承者,反之则不成立,父类变,子类不得不变;特点:1.子类拥有父类非private的属性和功能 2.子类具有自己的属性和功能 3.子类还可以以自己的方式实现父类的功能(方法重写);protected表示继承时子类对基类有完全访问权,也就是说,用protected修饰的成员,对子类公开,但不对其他类公开;子类从父类继承的成员有方法、域、属性、事件、索引指示器;构造方法不能被继承,只能被调用,调用父类的成员,用base关键字;缺点:继承会破坏封装,父类实现细节暴漏给子类,增大了两个类之间的耦合性,所以只有合理的使用继承才能发挥好的作用

    实例:现在只有Cat类,如果再加入狗Dog,牛Cattle,发现这几个类只有对象名不同,方法、属性完全相同,所以抽象出动物基类。如果不用继承,若要修改功能,就必须在所有重复的方法中修改,代码越多,出错的可能性就越大。而继承的优点是,继承使得所有子类公共的部分都放在了父类,代码得到共享,使得修改或扩展继承而来的实现都较为容易。


    第七讲:多态

    主要知识点:表示不同的对象可以执行相同的操作,但要通过它们自己的实现代码来执行;注意:1.子类以父类的身份出现 2.子类在工作时以自己的方式来实现 3.子类以父类的身份出现时,子类特有的属性和方法不可以使用;为了使子类的实例完全接替来自父类的类成员,父类必须将该成员表明为虚拟的,通过在该成员的返回类型之前加virtual关键字实现,通常虚拟的为方法,子类使用override将父类实现替换为它自己的实现,这就是方法重/覆写;当方法被调用时,无论对象是否被转换为其父类,都只有位于对象继承链最末端的方法实现会被调用,也就是说,虚方法是按照其运行时类型而非编译时类型进行动态绑定调用的

    实例:动物运动会比叫声,数组声明参加比赛的对象

   

    第八讲:重构

    主要知识点:模板方法

    实例:各个动物叫的方法里面只有声音不同,所以,在基类添加叫声的虚方法,子类改写


    第九讲:抽象类

    主要知识点:可把实例化没有任何意义的父类改为抽象类;抽象方法没有方法体,直接在括号后面加分号;特点:1.不能实例化 2.抽象方法是必须被子类重写的方法,没有实现体的虚方法 3.若类中包含抽象方法,类就必须定义为抽象类;要让抽象类拥有尽可能多的共同代码,尽可能少的数据;抽象类通常代表一个抽象的概念,它提供一个继承的出发点

    实例:将动物Animal设为抽象类,这样就不再需要存在虚方法的父类


    第十讲:接口

    主要知识点:把隐式公共方法和属性组合起来,以封装特定功能的一个集合;一旦类实现了接口,类就可以支持接口所指定所有属性和成员;声明接口在语法上与声明抽象类完全相同,但不允许提供接口中任何成员的执行方式,所以接口不能实例化,不能有构造方法和字段,不能有修饰符,不能声明虚拟的或静态的;接口用interface声明;接口中的方法或属性前面不能有修饰符、方法没有方法体;抽象类和接口的区别:1.抽象类可以给出一些成员的实现,接口却不包含成员的实现 2.抽象类的抽象成员可被子类部分实现,接口的成员需要实现类完全实现 3.一个类只能继承一个抽象类,但可以实现多个接口




   接口是对行为的抽象,如果行为跨越不同类的对象,可使用接口;从设计角度讲,抽象类是从子类中发现了公共的东西,泛化出父类---自底而上,然后子类继承父类;而接口是根本不知道子类的存在,方法如何实现还不确定,预先定义---自顶向下;敏捷开发:通过重构改善既有代码的设计

    实例:继承猫的叮当和继承猴的孙悟空比试变出东西,实现了变出东西的接口


    第十一讲:集合

    主要知识点:数组在内存中连续存储,可以快速而容易的从头到尾遍历元素,可以快速修改元素,但是创建时必须指定数组容量的大小,这就容易导致,数组长度设置过大,造成内存空间浪费,长度设置过小造成溢出,另外,在两个元素之间添加元素比较困难,所以,.Net Framework提供了用于数据存储和检索的专用类,这些类统称集合,提供对堆栈、队列、列表和哈希表的支持,大多数集合类实现相同的接口;ArrayList是命名空间System.Collections下的一部分,它是使用大小可按需动态增加的数组实现IList接口,ArrayList的容量是它可以保存的元素数,默认初始容量为0,索引从0开始;数组的容量是固定的,而ArrayList的容量是可根据需要自动扩充,可以随意的添加、插入或移除某一范围元素;ArrayList不是类型安全的string是一种拥有值类型特点的特殊引用类型;装箱:把值类型打包到Object引用类型的一个实例中;拆箱:从对象中提取值类型;进行拆装箱消耗资源和时间

    实例:客户端可以动态修改报名动物数量


    第十二讲:泛型

    主要知识点:相对于简单的赋值而言,装箱和拆箱过程需要进行大量的计算。对值类型进行装箱时,必须分配并构造一个全新的对象,其次,拆箱所需的强制转换也需要进行大量的计算,所以,ArrayList集合在使用值类型数据时,其实就是在不断的做装箱和拆箱的工作,非常糟糕,为了解决这一问题,推出了新技术---泛型;泛型是具有占位符(类型参数)的类、结构、接口和方法,需要System.Collections.Generic的命名空间;List类是ArrayList类的泛型等效类,该类使用大小可按需动态增加的数组实现IList泛型接口,关键就是在IList和List后面加上<T>,T就是需要指定的集合的数据或对象类型;List和ArrayList在功能上是一样的,不同的是前者在声明和实例化时都需要指定其内部项的数据或对象类型,这就避免了类型安全问题和装箱拆箱的性能问题;通常情况下,建议使用泛型集合,这样可以直接获得类型安全的直接优点而不需要从基集合类型派生并实现类型特定的成员。此外,如果集合元素为值类型,泛型集合类型的性能通常优于对应的非泛型集合类型(并优于从非泛型基集合类型派生的类型),因为使用泛型时不必对元素进行装箱;泛型集ArrayList集合和Array数组优点于一身

    实例:使用泛型集合替代动物报名按钮事件


    第十三讲:委托和事件

    主要知识点:委托是对函数的封装,可以当做给方法的特征指定一个名称,而事件则是委托的一种特殊形式,当发生有意义的事情时,事件对象处理通知过程,事件其实就是设计模式中观察者模式在.Net中的一种实现方式;委托是一种引用方法的类型,一旦为委托分配了方法,委托将与该方法具有完全相同的行为;委托关键字delegate;事件是说在发生其他类或对象关注的事情时,类或对象可通过事件通知它们;事件关键字event,EventArgs是包含事件数据的类的基类,这个类的作用是用来在事件触发时传递数据

    实例:猫Tom只要一叫“喵”,两只老鼠就说“老猫来了”,其中,猫不能关联老鼠,用委托事件来处理。 


    总结:学习附录,很多面向对象的基础知识一览无余,当然,为了更深入的理解这部分知识还需要学习正文的设计模式,附录部分的知识简单且重要,是学习面向对象编程的第一步,这是程序开发的一小步,却是面向对象的一大步,加油,还有很多好玩的知识等着我去发现!    


1 0
原创粉丝点击