【GiraKoo】面向对象开发系列之【为什么要用面向对象】
开源项目:https://girakoo.com/
问答
为什么要有面向对象开发?
面向过程开发的C语言,往往有以下几个问题:
- 不同的开发人员需要使用功能完全相同,或者大部分相同的函数。如果某个算法存在问题,很难保证工程里面其他位置的代码也同步获得更新。
- 各个模块之间都是硬链接,A调用B。如果B过时了,想要改成C。可能会导致工程里所有调用到B的模块无法通过编译。
- 数据结构没有权限管理。互相之间能直接读写数据。如果对模块不了解,很有可能会破坏某些内部处理。
针对这些问题,面向对象开发给了方案:
- 利用封装,继承关系。将功能类似的代码处理放到基类里面。所有的子类都能轻松调用。如果子类有特殊处理,可以利用多态,针对特定函数进行自定义。(高内聚)
- 利用设计模式,我们可以将两个模块的硬链接变成软链接。例如利用:工厂模式,建造者模式。就可以将对象实体隐藏到工厂和建造者后面。后期删除了A,只需要调整工厂和建造者的实现,就可以让代码变更量尽可能的小。(低耦合)
- 面向对象提供了权限管理,内部数据可以限制为Private级别。外部必须通过Public的函数进行修改。避免对功能不了解的开发人员,错误的更新数据,或者使用数据。类的维护者有能力保护自己的数据安全。(高内聚,低耦合)
如何理解设计模式
当面向对象编程的概念出现。我们需要一些工具,或者思想,来保证“高内聚,低耦合”的原则正确的实施。
设计模式,就是将可以使用的方案抽象成模式,供大家进行选择。
- 单例模式:可以限制程序中只有一个实例。保证数据的全局安全。
- 监听者模式:消息的发送者不需要提前知道接受者是谁。在开发时,只要制定了Listener/Observer的基类/接口类。就可以不受限制的进行开发。
- 工厂模式:工厂能够管理自己创建的对象类型,创建了多少个对象。甚至是管理每个对象的生命周期。
- 建造者模式:建造者可以根据外部的参数,决定创建的对象类型。灵活适配不同的使用场景。
【GiraKoo】面向对象开发系列之【为什么要用面向对象】的更多相关文章
- openresty开发系列23--lua面向对象
openresty开发系列23--lua面向对象 面向对象编程(Object Oriented Programming,OOP)是一种非常流行的计算机编程架构.java,c++,.net等都支持面向对 ...
- iOS开发系列--数据存取
概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库.例如前面IOS开发系列-Objective-C之Foundation框架的文章中提到归档.plist文件存储, ...
- iOS开发系列--并行开发其实很容易
--多线程开发 概览 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的, ...
- Asp.net Mvc模块化开发系列(目录)
模块化开发是非常重要的,模块化开发是个系统性问题,为此我觉得有必须要写一个系列的文章才能基本说的清楚 那又为什么要写一个目录呢? 其一.是对我昨天承诺写一个系列新的文章的回应 其二.是先写出一个大纲, ...
- C#微信公众号开发系列教程四(接收普通消息)
微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...
- 程序员带你学习安卓开发系列-Android文件存储
这是程序员带你学习安卓开发系列教程.本文章致力于面向对象程序员可以快速学习开发安卓技术. 上篇文章:.Net程序员快速学习安卓开发-布局和点击事件的写法 主要讲解了布局和点击事件的写法. 上篇文章补充 ...
- 【转】iOS开发系列--数据存取
原文: http://www.cnblogs.com/kenshincui/p/4077833.html#SQLite 概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储 ...
- 使用 Dojo 掌握面向对象开发
原文出处:Joe Lennon 从头开始学习 Dojo,第 2 部分 使用 Dojo 掌握面向对象开发 什么是面向对象开发? 面向对象编程(Object-Oriented Programming,OO ...
- openresty开发系列12--lua介绍及常用数据类型简介
openresty开发系列12--lua介绍及常用数据类型简介 lua介绍 1993 年在巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de ...
- 面向对象JML系列作业总结
面向对象JML系列作业总结 一.综述 本单元作业,由简到难地迭代式实现了三种JML需求,主要学习了面向规格的编程方法. 第一次:实现Path类和PathContainer类 第二次:继承PathCon ...
随机推荐
- MySQL:查询语句 case when then 的用法
转载网址: https://blog.csdn.net/h123hlll/article/details/122366213
- 对于实现上一篇遇到的问题——MyBatis+增删改查(已解决)
问题一:该Http不支持Get/Post方法 我根据网上的解决方法将Get和Post的位置来回换,还是不停报错: 后来偶然间看到一个博主发的"你的代码写在Get或者Post里面,就将没写代码 ...
- SpringBoot部署到外部Tomcat无法注册到Nacos服务端
事情经过 近期做一个项目投标演示(POC)环境支持,需要集成Nacos服务端.考虑到现有项目中已经有了Nacos相关依赖,那还不简单?新建个服务端,配置几下重启不就搞定了吗?然而事情远没有想得这么简单 ...
- 使用Mathematica做序列的DTFT的几个例子
ListFourierSequenceTransform[{-2, -1, 1, 3, 3, 1, -1, -2}, \[Omega]] ParametricPlot[{Re[%], Im[%]}, ...
- CSS必知必会
CSS概念 css的使用是让网页具有统一美观的页面,css层叠样式表,简称样式表,文件后缀名.css css的规则由两部分构成:选择器以及一条或者多条声明 选择器:通常是需要改变的HTML元素 声明: ...
- window.onload / onscroll/onresize 事件
onload当文档加载完成后执行一些操作 window.onload = function(){ console.log("页面加载完成") } onscroll当页面发生滚动时执 ...
- python协程详细解释以及例子
目录 1.协程 1.1greenlet实现协程 1.2yield关键字实现协程 1.3使用asyncio模块实现协程 1.4async & await关键字实现协程 2.协程意义 3.异步编程 ...
- 方差分析2——双因素方差分析(R语言)
双因素方差分析(Double factor variance analysis) 有两种类型:一个是无交互作用的双因素方差分析,它假定因素A和因素B的效应之间是相互独立的,不存在相互关系:另一个是有交 ...
- [Java SE/Junit] 基于Java的单元测试框架Mockito
Mockito 是一个模拟测试框架,主要功能是在单元测试中模拟类/对象的行为. 1 为什么要使用Mockito? Mock可以理解为创建一个虚假的对象,或者说模拟出一个对象.在测试环境中用来替换掉真实 ...
- Kubernetes客户端认证(二)—— 基于ServiceAccount的JWTToken认证
1.概述 在 Kubernetes 官方手册中给出了 "用户" 的概念,Kubernetes 集群中存在的用户包括 "普通用户" 与 "Service ...