当前位置: 首页 > news >正文

面向对象设计

通常的认知,面向对象程序设计最早从Simula发展而来,而后的SmallTalk也为面向对象提供了参考。ObjC借用SmallTalk消息的概念,C++扩大发展了OOP技术,为Java/C#等语言提供了坚实的基础。还有其他语言,Module-2提出模块MODULE概念,可以封装子程序和数据结构,限制访问权限,Clu提出了里氏替换原则,也为OOP设计提供了思路。

面向对象思想

  • 面向过程和面向对象思维
    • 习惯C语言函数过程思维,第一次接触面向对象可能有很强的不适应感。感觉这个世界应该是按过程去执行,而不是new一个对象。事实上,面向对象并没有改变程序的本质,依然是函数过程代码执行,只不过要找一个宿主。数据和对数据操作的函数分离造成很大的不便,面向对象就为了解决这个问题。
    • 面向对象类就是C语言的”结构体”,将操作函数和花哨特性加进来,访问更方便,这就是面向对象的本质。
    • 包含对于C语言main函数而言,简单直接,输出hello world即可。Java和C#必须新建一个类,类里面写Main函数。Java更甚,还要求至少一个类名是public,且和文件名相同,这造成了一些困扰。理解它需要了解,Java是为了规范化,用类让所有人都遵循,Main函数也不例外。这对于写测试代码,会产生冗余,这是语言的要求带来的”副作用”。C++比较圆滑,C语言虽然有时不够稳健,但main函数是C语言说的算,这让C++成为一门极其有特色的语言,你可能写的像C语言,也可以像Java,有的人写的四不像,高手写成一段经典,新手写得不能看。

  • 不同访问权限
    • 社会上有一些公共设施,大家都可以了解,去使用,这是public. 爸爸可能会希望房子继承给他的儿子,这是protected,房子目前爸爸和儿子都可以去住。爸爸为了自己的生活能继续,私自藏了200块,这是private. 请你最好的朋友来你家做客,他能在你家很随意,这是friend.
    • 最早Smalltalk提出public/private概念。

  • 多态
    • 孩子高考填志愿,爸爸妈妈和老师都给了建议,但孩子坚持要听从内心的想法,这是多态。孩子父母落下一句话,一定要听他们的建议,这是不可重写的函数。

  • 消息
    • 一般而言,类函数并没有消息的概念,SmallTalk和ObjC强化了消息的概念,调用一个类对象的函数方法被称为发送消息,这个消息和GUI消息机制完全无关,它仅仅是函数调用的代名词。它们之所以这么称呼,源于有一套动态库,处理消息转发,即使目标对象根本不存在这个消息,编译依然不会报错。这在C++/Java/C#/Python是不能想象的。这有一个优点,可以模块化,主模块可以不用知道被调用模块是否存在,只管去调用,不管有还是没有,最终做对应处理即可。这简化了某些时候的处理。

支持面向对象设计OOP的语言

  • 面向对象设计相比面向过程有不少优点,一些很老的编程语言也在新标准中纷纷加入。比如Fortran/Ada等。
  • C++/Java/C#/Python均支持面向对象设计。
  • Go语言作者之一原本参与C语言设计,不太喜欢C++复杂的设计,用一套类似C语言结构体组合的方式模拟面向对象设计。


微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

欢迎关注。助您在编程路上越走越好!


http://www.mrgr.cn/news/6055.html

相关文章:

  • 数据结构——顺序表
  • 论文翻译:Benchmarking Large Language Models in Retrieval-Augmented Generation
  • 【小程序】微信小程序的生命周期
  • Kubernetes全名及其缩写K8S的正确读音
  • 使用Blender进行3D建模—基础操作笔记
  • 「对比评测」标准WPF DataGrid与DevExpress WPF GridControl有何不同?(一)
  • 基于Springboot宠物商城网站系统--论文pf
  • Android常见界面控件(二)
  • 增材制造(3D打印):为何备受制造业瞩目?
  • 天正如何保存低版本
  • Go 语言调度器(schedule)的实现原理
  • 《通义千问AI落地—中》:前端实现
  • 解决git checkout -b 拉取远端某分支到本地时报错
  • WHAT - graphql 系列(二)- graphql-codegen
  • Vue+ElementUI 表校验不通过时点击提交按键 自动定位到第一个表单校验不通过位置
  • 37-RPC HTTP区别是什么
  • RabbitMQ
  • 在idea中的git选择某一次记录拉出一个新分支
  • vue js 前端同时下载多个文件,前端多文件下载
  • oracle和mysql查询某字段在哪个表中