面向对象从接触到入门

文章将分四部分讨论

1 我们的问题

2 什么时候及为什么看设计模式

3 设计模式讲的什么

4 通过Java入门

1 我们的问题

也许在迈入编程神秘世界之前,我们都在纠结从C语言的结构化编程开始呢还是直接投入OO的怀抱。

可能你跟我一样也听说了,习惯了一种思路就很难开始转到另一种。或许你会这样,想了又想,昂扬的翻开了一本Java或者C++程序设计大部头的书本,然后陷落到封装、继承、多态的海洋中。书翻了一页又一页,一个章节看完了接着下一个章节。最后我说,咱们来搞点什么吧,可是谁也不知道从哪里下手。

一个程序是被怎么设计出来的?为什么我看了很多的编程语言还是学不会设计?为什么说ctrl+c,ctrl+v很失败,我觉得也挺好呀?从大一开始学习C++,Java也写了毕业到现在,为什么提起OO,仍旧是嘴里面向对象的三大特征,再之后就什么都说不出来了?

别意外,这些问题都是好长一段时间,同样也困扰了我很久,直到现在。

我想一下,在这之前我是怎么写代码的呢。

想清楚这一步骤要做什么,然后需要几个函数处理,从类似地地方将一大块代码copy过来,然后修改。是了,问题就这样解决了,哈哈哈哈,我很厉害哦。实际上,这就是过程化编程。

这个时候我们这样设计一个程序:把需求理解成一条一条的业务流程,然后把流程组合交织成一块,然后划分为一个有一个模块,最终又通过函数,实现了需求。这时候,或者会想到unix编程艺术强调的模块化编程,心里带着点小得意,同时也有点困惑,却不知道问题出在哪里。

2 什么时候及为什么看设计模式

直到我开始看了《大话设计模式》。辞职这段时间,逐渐看完了设计模式,对整本书,我理解吸收的也许很少,但总感觉是打开了一扇门。

书里面有一句话:没有学过设计模式,那么对于多态乃至面向对象的理解多半是肤浅和片面的。之前我很多次打开设计模式,总觉得过于枯燥,还是无从下手,我想如果你完整的看完了一本面向对象的设计语言的书,这个时候就勇敢的打开设计模式吧,不要说设计模式是一个很神秘的东西,需要写多少行代码才可以学习一类。

程序员思维修炼有提到一个德雷福斯模型

所谓的设计模式就是这样的一份指令清单,告诉你什么样的设计是好的设计,应该如何使用好一门面向对象的语言。看完了设计模式,思维才有了着地点,才会摆脱过程化变成拷贝粘贴的漩涡。不要以为设计模式是终点,读完了设计模式,才刚刚上路呢。所以,我说就勇敢的开始吧。

3 设计模式讲的什么

设计模式讲的什么?六大设计原则,一句话:

封闭-开放:已经写好代码,对于修改封闭,扩展开放

单一职责:一个类只负责一项功能,

迪米特法则:如果两个类不必直接通信,那就不应该发生直接的相互关系

依赖倒转:针对接口编程,不要针对实现编程

里式代换:父类都能被子类替换

接口隔离:一个类要实现的接口中不应该包含他不需要的方法

然后就是由六大设计原则得出的23中设计模式:

创建型:研究对象的创建。

  

工厂方法模式,抽象工厂模式,单例模式,建造者模式:原型模式

结构型:研究对象的组成及其依赖关系。

  模板方法模式(Template Method);观察者模式(Observer);状态模式(State);策略模式(Strategy);职责链模式(Chain of Responsibility);命令模式(Command);访问者模式(Visitor);调停者模式(Mediator);备忘录模式(Memento);迭代器模式(Iterator);解释器模式(Interpreter)。

行为型:描述对象或类的模式及通信方式

  模板方法模式(Template Method);观察者模式(Observer);状态模式(State);策略模式(Strategy);职责链模式(Chain of Responsibility);命令模式(Command);访问者模式(Visitor);调停者模式(Mediator);备忘录模式(Memento);迭代器模式(Iterator);解释器模式(Interpreter)。

 

4 面向对象通过Java入门

我建议的路线路线:

1 完整的看完一遍 《think in java》,书能从头看到尾 。过一边,了解Java可以做到什么事情。

2 回过头复习重点:

初始化与清理章节:了解堆、栈,垃圾回收。

持有对象:容器分类

各种容器具体特性及选择

泛型及容器深入研究

多线程处理 并发

3 学习设计原则及设计模式

这一步后或许就会觉得自己像是合格的新手了。

与大家共勉。

时间: 2024-08-09 16:53:49

面向对象从接触到入门的相关文章

面向对象开发C++快速入门视频教程 C++基础加实战视频教程

课程目录: ├<C++面向对象高级开发(上)> │ ├1.C++编程简介.mp4 │ ├2.头文件与类的声明.mp4 │ ├3.构造函数.mp4 │ ├4.参数传递与返回值.mp4 │ ├5.操作符重载与临时对象.mp4 │ ├6.复习Complex类的实现过程.mp4 │ ├7.三大函数:拷贝构造,拷贝复制,析构.mp4 │ ├8.堆,栈与内存管理.mp4 │ ├9.复习String类的实现过程.mp4 │ ├10.扩展补充:类模板,函数模板,及其他.mp4 │ ├11.组合与继承.mp4

面向对象初接触(下)

当一个类中的属性条件不满足我们的需求时,考虑到为了不破坏封装,从而对其属性进行增加的实现,就有了以下几种方法 猴子补丁 from test01 import Person from test001 import get_score def monkeypatch4Person(): Person.get_score = get_score monkeypatch4Person() if __name__== '__main__': print(print(Person().get_score))

Java面向对象之关键字static 入门实例

一.基础概念 静态关键字 static 是成员修饰符,直接用于修饰成员. (一)特点: 1.被静态修饰的成果,可以直接被类名所调用. 2.静态成员优先于对象存在. 3.静态成员随着类的加载而加载.随着类的消失而消失.静态成员的生命周期很长. (二)注意事项: 1.静态方法只能访问静态成员,不能访问非静态成员. 2.静态方法中不能出现this或者super关键字. 3.主函数是静态的. (三)什么时候用: 1.成员变量:如果数据在所有对象中都是一样的.直接用静态修饰. 2.成员函数:如果函数没有访

Java面向对象之抽象类abstract 入门实例

一.基础概念 抽象事物,是若没有具体的信息可以描述这个事物,这个事物可以称为抽象事物. 抽象类,是不断的向上抽取而来.抽取方法声明而不确定具体的方法内容.由不同的子类来完成具体的方法内容. (一)抽象类的特点: 1.抽象方法没有方法体,必须由抽象关键字abstract来修饰. 1.抽象方法一定是存在于抽象类中,必须有抽象关键字abstract来修饰. 2.抽象类不能实例化.不能用new关键字创建对象. 3.子类必须覆盖抽象类中的所有抽象方法后,才可以实例化.否则该子类还是一个抽象类. (二)抽象

面向对象编程-进阶(python3入门)

一.property装饰器的使用 #property:将一个方法伪装成一个数据属性 #如果不用property装饰器的话,这个bmi值就需要用 obj.bmi() 来调取数值,这个看起来更像一个功能,而不像一个特征 #例1 # class People: # def __init__(self,name,height,weight): # self.name = name # self.height =height # self.weight = weight # # @property # d

[书目20160624]Android应用开发从入门到精通

卢海东 著 第1章 揭开神秘面纱——Android系统简介 1   1.1 认识Android系统 2   1.1.1 Android成长历程 2   1.1.2 发行版本 3   1.1.3 得到大家的认可——Android系统的市场份额 3   1.2 Android架构解析 4   1.2.1 Android系统架构图 4   1.2.2 应用程序(Applications) 5   1.2.3 应用程序框架层(Framework) 6   1.2.4 系统运行库(Libraries) 7

.NET 高级架构师0004 架构师之路(3)---详解面向对象

 详解面向对象的编程(OOP) 3.5.1 什么是面向对象    刚接触编程的时候,多数人本能的反映可能是面向过程(OP)的,而不是面向对象(OO)的.这种现象其实是很正常的,改变思维方式是需要一个过程的,我大体归纳了一下其形成的原因: 1.直接原因    你还没有养成面向对象分析问题和解决问题的习惯.建立面向对象的思维方式需要一定时间的训练和揣摩才能形成,所以你可以在学习或具体项目中刻意地强化这种意识.一般情况下,经过一段时间之后,你会觉得这是自然而然的事情,只有心中OO,眼中自然OO了. 2

(一)关于面向对象----继承

(一)关于面向对象----继承 接触面向对象许久了,对于继承这一块也确实琢磨了一段时间,搜集各种资料和网站,也未能得到使自己满意的,并能快速理解的继承知识,于是对他们归类,并得出自己的总结. 先说说继承是什么吧?也许我们最早接触有关继承的应该是"遗产"??也许电视剧看多了,总有家族为了这玩意儿整的你死我活,确实听看不下去的哈,但是对于咱大JS而言,可就变得十分和蔼,可亲.毕竟没有人来争夺,也不会有任何事故,最多来些许bug等等.废话不多说,进入正题!! 1.扩展原型对象继承:往原型对象

LaTeX新人教程,30分钟从完全陌生到基本入门

by Nan 对于真心渴望迅速上手LaTeX的人,前言部分可以跳过不看. 本教程面向对LaTeX完全无认知无基础的新人.旨在让新人能够用最简单快捷的方式,轻松入门,能够迅速使用LaTeX完成基本的文本编辑.这个教材最终能够达到的水平是能够使用LaTeX写一篇正常的proposal.如果希望有更大需求的提高,那么推荐在熟悉了这一篇文章的内容之后,再自行google或查阅其他稍厚的教材.尤其旨在破除部分新人对LaTeX在传闻中难以学习的恐惧感.在入门之后,面对各种进阶应用.特殊要求与异常状况,可以自