设计模式从零开始(一)

设计模式(零)——面向对象基础

       从今天开始我将给大家带来设计模式从零开始系列课程,本系列课程主要面对学完C++、java、C#等面向对象语言的同学们,如果你是大牛请直接略过,当然十分欢迎大家给我提出宝贵的意见,我将十分感激!希望本课程可以帮助同学们更好的使用设计模式,以及更好的理解面向对象的程序设计思想,同时也为了自己能够更加深入的理解和运用各种设计模式!(本教程将以C++作为标准语言,java或者C#程序员可以很容易将C++代码转化为自己语言的代码!因此一示例程序将会只有C++代码,时间不允许还望理解,如果遇到什么问题欢迎向我提问!)我会尽量做到每周五更新一篇的!还请大家多多支持啊!

何为类?何为对象?

       类(Class):从字面意思可以看出,生活中的类就是对事物的分类,比如狗是一类,猫是另一类,两者并不相同;那么程序设计中的类又指什么呢?程序设计中的类是对现实生活中一类具体物体的抽象,根据抽象的程度不同,同一类物体可能会得到不同的抽象;比如:藏獒,可以抽象为藏獒类,也可以抽象为狗类。
       对象(Object):我认为这个词的英语去理解还是比较到位的,对象就是一个具体的东西,他是类的实例。如果把类看作是一张设计图纸的话,那么对象就是根据这张图纸生产出来的具体事物!比如说:藏獒类的一个对象就是一只实实在在价值很高的藏獒!
       可以说,对象是类的一个具体表现,没有类的定义就没有办法实例化得到一个对象,就好比没有设计图纸就没有办法生产零件一样!下面介绍类的定义:
class dog
{
private://访问权限声明
      .....;//这里是数据成员,是描述类的属性;
public://访问权限声明
    dog();//这个是构造函数,它会在该类的一个实例被创建时调用;
    void shout();//这个是成员函数,用来实现这个类所具有的功能;
    ......
    ~dog();//这里是析构函数,它会在该类的一个实例被delete时执行;
};
值得注意的是:
1、构造函数和析构函数也是成员函数;
2、构造函数和成员函数如果不定义的话,系统会提供默认的构造函数和析构函数,当然功能就不能保障了。
由于语言特性不是本教程讨论的重点,只是简单提及,如果想深入了解请查看相应的书籍或者资料;google一下,你就知道!
如果对于自己语言的类相关的语法声明不太了解的话,我提供一下关键词,供大家搜索:
1、“java/C++/C#”+类与实例
2、“java/C++/C#”+构造方法(构造函数)、析构函数
3、“java/C++/C#”+方法重载
4、“java/C++/C#”+属性与修饰符
类与对象的基本概念告一段落,下面讨论一下面向对象的三大特性:
一、封装
将一类事物的属性(自有的变量)和行为(成员函数)放在同一个类中,功能和数据在类内部进行操作,对类外只留下相应的接口,这种程序设计的方式就叫做封装 就好比一个面包板内部实现了功能,对外只有管脚一样!
那么好好地为什么要封装呢?自然是有它的好处:
1、良好的封装能够降低耦合(何为耦合?就是一个功能与外界的关联程度,比如外部代码变了,而你的功能模块不用修改或者很少的的修改就可以了,这就是耦合度低的表现!还不懂?嘿嘿,问问度娘或者谷哥吧)
        2、类内部实现可以自由修改,或者可以表述为高内聚(什么叫高内聚?嘿嘿,问问度娘或者谷哥吧
3、对外接口明显
二、继承
继承?继承财产?No,No,No程序设计中没有财产给你继承哦,嘿嘿,这里的继承表现出来的是一种A is B的关系,比如“藏獒是狗狗”,“男人是人”,“女人是人”等等,这样的 A是B 的关系就可以用继承来描述!
在程序当中,如果A继承自B那么A就拥有B的一些特性(只包括protected和public特性)A就被称作B的派生类或者子类,B就叫做A的父类或者基类。
想学好继承可以记住并好好理解以下三句话:
1、子类继承父类,就继承了父类中非private的属性和方法
2、子类具有自己独有的属性和方法,就是子类可以扩展父类
3、子类可以重新实现父类的方法,即方法重载
三、多态
多态?变态?差不多一个意思,所谓多态就是指从同一父类继承得来的所有子类在执行父类中相同的函数是表现出不同的结果!什么意思呢?举个例子吧:
比如猫,狗都是从动物类继承来的,动物类中有一个shout方法,但是狗和猫总不能叫声一样吧,所以他们就会在自己的类中有不同的shout实现,当你用父类指针分别指向猫和狗并进行shout方法调用的时候,就会有不同的结果了!看看代码或许能够更好地理解:
class animal
{
public:
    animal(){}
    void shout(){}
    ~animal(){}
};
class dog:public animal      //继承animal的属性和方法
{
public:
    void shout(){cout << "wang"<< endl;}
};
class cat:public animal     //继承animal的属性和方法
{
public:
    void shout(){cout << "miao" << endl;}
};

void main()
{
    animal* ani;
    ani=new cat();
    ani->shout();
    delete ani;
    ani=new dog();
    ani->shout();   //与上一次的shout()执行结果不一样就表现出了多态的性质
    delete ani;
}
有关面向对象的基础就暂时讲到这里,如果有同学不太了解的话,可以问我,给我留言。由于个人精力问题(课程任务好重说!)如果有问题没有阐述清楚敬请谅解!
最后希望大家多跟度娘和谷哥交流,他们会是最好的老师!那么下次课程再见!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值