【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 ...
随机推荐
- 痞子衡嵌入式:在i.MXRT1060-EVK上利用memtester程序给SDRAM做压力测试
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是在i.MXRT1060-EVK上利用memtester程序给SDRAM做压力测试. 我们知道恩智浦i.MXRT1xxx系列是高性能MCU ...
- 音视频同步!RTCP 协议解析及代码实现
RTCP 是实时控制协议(Real-Time Control Protocol)的缩写.RTCP 由 RFC 3550 定义(取代作废的 RFC 1889). 实时传输协议(RTP)和实时控制协议(R ...
- 分布式搜索-elasticsearch
学习黑马- SpringCloud微服务技术栈项目的分布式搜索章节自行整理的笔记,方便日后的重构. 项目涉及技术 知识点是按照集数依次整理,方便日后回来查找. 考虑到不是固定的联网方式,时而WiFi, ...
- Windows和Linux时间相差8个小时
安装linux系统比如deepin.ubuntu之后和Windows两个系统时间相差八个小时的解决方案: 在linux系统下依次输入下方命令: sudo apt install ntpdate sud ...
- vue双向监听proxy
console.log('判断页面是否有滚动条', this.hasScrollbar) const that = this that.count = 0 // 计数 that.scrollProxy ...
- GPT接入企微应用 - 让工作快乐起来
引子 最近最火的莫过于ChatGPT了,在自己体验后就想着如何其他同事也能方便的起起来,毕竟独乐乐不如众乐乐,自己注册又是V-P-N,又是国外手机验证,对于大部分同事来说门槛还是高的.现在也有不少小程 ...
- kafka rebalance你真的了解吗
介绍 今天主要分享一下 kafka 的 rebalance,在 kafka 中,rebalance 是一个十分重要的概念,很多时候引发的一些问题可能都是由于 rebalance 引起的,rebalan ...
- Lodash中常用函数,不建议经常使用,容易让人变懒忘了原生函数
1.N次循环 <script type="text/javascript"> console.log('------- javascript -------'); // ...
- 全网最详细中英文ChatGPT-GPT-4示例文档-信息智能提取从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)
目录 Introduce 简介 setting 设置 Prompt 提示 Sample response 回复样本 API request 接口请求 python接口请求示例 node.js接口请求示 ...
- LeetCode 双周赛 101,DP/中心位贪心/裴蜀定理/Dijkstra/最小环
本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 大家好,我是小彭. 这周比较忙,上周末的双周赛题解现在才更新,虽迟但到哈.上周末这场是 LeetCode 第 ...