开源项目:https://girakoo.com/

问答

为什么要有面向对象开发?

面向过程开发的C语言,往往有以下几个问题:

  1. 不同的开发人员需要使用功能完全相同,或者大部分相同的函数。如果某个算法存在问题,很难保证工程里面其他位置的代码也同步获得更新。
  2. 各个模块之间都是硬链接,A调用B。如果B过时了,想要改成C。可能会导致工程里所有调用到B的模块无法通过编译。
  3. 数据结构没有权限管理。互相之间能直接读写数据。如果对模块不了解,很有可能会破坏某些内部处理。

针对这些问题,面向对象开发给了方案:

  1. 利用封装,继承关系。将功能类似的代码处理放到基类里面。所有的子类都能轻松调用。如果子类有特殊处理,可以利用多态,针对特定函数进行自定义。(高内聚)
  2. 利用设计模式,我们可以将两个模块的硬链接变成软链接。例如利用:工厂模式,建造者模式。就可以将对象实体隐藏到工厂和建造者后面。后期删除了A,只需要调整工厂和建造者的实现,就可以让代码变更量尽可能的小。(低耦合)
  3. 面向对象提供了权限管理,内部数据可以限制为Private级别。外部必须通过Public的函数进行修改。避免对功能不了解的开发人员,错误的更新数据,或者使用数据。类的维护者有能力保护自己的数据安全。(高内聚,低耦合)

如何理解设计模式

当面向对象编程的概念出现。我们需要一些工具,或者思想,来保证“高内聚,低耦合”的原则正确的实施。

设计模式,就是将可以使用的方案抽象成模式,供大家进行选择。

  • 单例模式:可以限制程序中只有一个实例。保证数据的全局安全。
  • 监听者模式:消息的发送者不需要提前知道接受者是谁。在开发时,只要制定了Listener/Observer的基类/接口类。就可以不受限制的进行开发。
  • 工厂模式:工厂能够管理自己创建的对象类型,创建了多少个对象。甚至是管理每个对象的生命周期。
  • 建造者模式:建造者可以根据外部的参数,决定创建的对象类型。灵活适配不同的使用场景。

【GiraKoo】面向对象开发系列之【为什么要用面向对象】的更多相关文章

  1. openresty开发系列23--lua面向对象

    openresty开发系列23--lua面向对象 面向对象编程(Object Oriented Programming,OOP)是一种非常流行的计算机编程架构.java,c++,.net等都支持面向对 ...

  2. iOS开发系列--数据存取

    概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库.例如前面IOS开发系列-Objective-C之Foundation框架的文章中提到归档.plist文件存储, ...

  3. iOS开发系列--并行开发其实很容易

    --多线程开发 概览 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的, ...

  4. Asp.net Mvc模块化开发系列(目录)

    模块化开发是非常重要的,模块化开发是个系统性问题,为此我觉得有必须要写一个系列的文章才能基本说的清楚 那又为什么要写一个目录呢? 其一.是对我昨天承诺写一个系列新的文章的回应 其二.是先写出一个大纲, ...

  5. C#微信公众号开发系列教程四(接收普通消息)

    微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...

  6. 程序员带你学习安卓开发系列-Android文件存储

    这是程序员带你学习安卓开发系列教程.本文章致力于面向对象程序员可以快速学习开发安卓技术. 上篇文章:.Net程序员快速学习安卓开发-布局和点击事件的写法 主要讲解了布局和点击事件的写法. 上篇文章补充 ...

  7. 【转】iOS开发系列--数据存取

    原文: http://www.cnblogs.com/kenshincui/p/4077833.html#SQLite 概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储 ...

  8. 使用 Dojo 掌握面向对象开发

    原文出处:Joe Lennon 从头开始学习 Dojo,第 2 部分 使用 Dojo 掌握面向对象开发 什么是面向对象开发? 面向对象编程(Object-Oriented Programming,OO ...

  9. openresty开发系列12--lua介绍及常用数据类型简介

    openresty开发系列12--lua介绍及常用数据类型简介 lua介绍  1993 年在巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de ...

  10. 面向对象JML系列作业总结

    面向对象JML系列作业总结 一.综述 本单元作业,由简到难地迭代式实现了三种JML需求,主要学习了面向规格的编程方法. 第一次:实现Path类和PathContainer类 第二次:继承PathCon ...

随机推荐

  1. Spring--案例:测试业务层接口万次执行效率

    案例来袭 这样,并不能够分辨出哪个的效率是哪个 可以利用pjp进行这样的操作: 结果:

  2. 使用 Agora SDK 开发 React Native 视频通话App

    在 React Native 的应用中,从头开始添加视频通话功能是很复杂的.要保证低延迟.负载平衡,还要注意管理用户事件状态,非常繁琐.除此之外,还必须保证跨平台的兼容性. 当然有个简单的方法可以做到 ...

  3. 使用python自动监控程序运行过程数据

    操作系统 :CentOS 7.6.1810_x64 Python 版本 : 2.7.5 一.背景描述 工作中会遇到需要监控程序运行过程数据的情况,比如定时执行监控的cmd并记录执行结果,本文提供一种实 ...

  4. BootstrapBlazor + FreeSql ORM 实战 Table 表格组件维护多表数据 - OneToOne

    OneToOne 垂直扩展表字段是很常见的方法, 主表存商品资料, 分表存每个客户对应商品的备注和个性化的价格等等, 本文使用Blazor一步步实现这个简单的需求. 1. 基于实战 10分钟编写数据库 ...

  5. PyQt5学习 (3)--QWidget(下)

    层级关系.层级控制: 调整Z轴顺序 点击查看代码 label1 = QLabel(window) label1.setText("标签1") label1.resize(200, ...

  6. Vue2依赖收集原理

    观察者模式定义了对象间一对多的依赖关系.即被观察者状态发生变动时,所有依赖于它的观察者都会得到通知并自动更新.解决了主体对象和观察者之间功能的耦合. Vue中基于 Observer.Dep.Watch ...

  7. 1、kubernetes概念

    一.kubernetes简介 kubernetes的本质是一组服务器集群.它可以在每个节点上运行特定的程序,来对节点中的容器进行管理.目的是为了实现资源管理的自动化. 主要功能如下: 1.自我修复:一 ...

  8. BISS-C 8通道采集renishaw传感器及其CRC校验

    背景 BISS-C 是常见的位置编码器传输协议,相对于传统的协议,支持更快的传输速度,电器接口为电压差分RS422或者485,抗干扰能力较强,在精密位置传输中应用广泛. 下述信息源自雷尼绍 典型的请求 ...

  9. API Gateway vs Load Balancer:选择适合你的网络流量管理组件

    本文从对比了 API Gateway 和 Load Balancer 的功能区别,帮助读者更好地了解他们在系统架构中扮演的角色. 作者陈泵,API7.ai 技术工程师. 原文链接 由于互联网技术的发展 ...

  10. prometheus node-exporter安装

    目录 prometheus node-exporter安装 包安装在linux服务器 Daemonset安装 Docker安装 helm安装 prometheus node-exporter安装 安装 ...