开源项目: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. odoo 权限管理学习总结

    环境 odoo-14.0.post20221212.tar base_user_role-12.0.2.1.2.zip 下载地址: https://apps.odoo.com/apps/modules ...

  2. 文件的上传&预览&下载学习(五)

    1.背景 一个知识库,要求文件对不同的角色有不同的实现,比如某些角色只能在线预览,某些可以下载.在线观看. 2.分析 知识库其实也可以看做商品表,商品有商品图片(商品表与文件信息表做关联,因为商品有多 ...

  3. 好饭不怕晚,Google基于人工智能AI大语言对话模型Bard测试和API调用(Python3.10)

    谷歌(Google)作为开源过著名深度学习框架Tensorflow的超级大厂,是人工智能领域一股不可忽视的中坚力量,旗下新产品Bard已经公布测试了一段时间,毁誉参半,很多人把Google的Bard和 ...

  4. OSM(OpenStreetMap)全球路网数据下载方式介绍

      本文对OpenStreetMap(OSM)网页与各类OSM数据的多种下载方式加以详细介绍,并对不同数据下载方式加以对比.   OSM数据包含道路与铁路路网.建筑.水体.土地利用.兴趣点.行政区边界 ...

  5. java -- static, 内部类, 权限, 参数传递

    static关键字 static是静态修饰符,一般修饰成员.被static修饰的成员属于类,不属于单个这个类的某个对象.static修饰的成员被多个对象共享.static修饰的成员属于类,但是会影响每 ...

  6. 二进制安装Kubernetes(k8s) v1.26.1 IPv4/IPv6双栈 可脱离互联网

    二进制安装Kubernetes(k8s) v1.26.1 IPv4/IPv6双栈 可脱离互联网 https://github.com/cby-chen/Kubernetes 开源不易,帮忙点个star ...

  7. SSM整合的所有配置(配置文件)

    mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE co ...

  8. day13:迭代器&高阶函数(map,reduce,filter,sorted)

    迭代器 1.迭代器的定义: 能被next调用,并不断返回下一个值的对象,叫做迭代器(对象) 2.迭代器的概念: 迭代器指的是迭代取值的工具,迭代是一个重复的过程, 每次重复都是基于上一次的结果而继续的 ...

  9. Spring自定义参数解析器设计

    作者:京东零售 王鹏超 1.什么是参数解析器 @RequstBody.@RequstParam 这些注解是不是很熟悉? 我们在开发Controller接口时经常会用到此类参数注解,那这些注解的作用是什 ...

  10. Go语言实现协程下载器

    一般常用的下载方式是通过浏览器访问URL,然后基于HTTP进行下载.这种单线程下载方式通常比较慢,这里尝试使用Go语言实现一个多协程的下载器. 大致思路 按照传统的单线程的思路,实现下载要基于HTTP ...