谈谈编程思想-抽象,状态,面向对象

前言

JavaScript的内容晚点更新,和大家聊一聊一些对于编程新手陌生或遥远,但对老程序员来说已经异常熟悉的东西

抽象

简单来说就是要求你能把一些事物进行分析,把它从“现实”的问题肢解成一个个“抽象”的行为,这个过程就是一次简单的抽象,往深了说,就是你要想办法让电脑里一两个电子管的跳动变成帮助你解决问题的工具,不过这些计算机原理的东西,了解理解就好,前人把那些东西一层层抽象包裹起来就是为了方便后人理解并使用,除非你要走在技术前沿或做研究,不然简单的了解和理解就足够了,抽象是编程里一个非常重要的思想,很多程序员的技术高低就来自于思维的差别,技术只是工具,思想和面对问题的思维才是你做程序员必须的内功,你的内功修为决定了你是否能成为大师,同时你也可以把这种思想应用在除了编程以外其他地方,比如生活中的各种事情,拿我很喜欢的一档节目《挑战荒野》(德爷的)举例,德爷在开始正式挑战前会花一点时间思考自己的情况,可能有分析,还有安抚情绪什么的,抽象这个内功夫其实在现实里无处不在,并不是只有编程用得到。

对象

关于状态我想和状态放在一起,各位是否想过其实许多java能做的事情c也能做到但为什么java是面向对象,c却不是,我们去回看许多成熟代码,你能够发现,所谓的OOP或者说面向对象编程,看起来就是多了许多new?

我们做个假设,小明要给班里的同学分发作业本,每发一个他就会少一本,小明想知道自己一共还有多少本作业要发

让我们分析一下这个问题,通过观察对象,我们能发现两个行为

1.发作业

2.计算作业数量

每种语言都有不同的表示方式,我们为了方便说明不使用真正的代码

这里我们已经完成了上方描述的抽象,我们把一个具体的问题抽象成两个行为代码块,为了让它行动起来,我们还需要状态,也就是作业数量,以此为基础把状态于行为代码按正确的逻辑编写,我们就能得到一个正常的业务逻辑,一个我们需要的问题答案,这个过程很简单,我们把现实问题分析出需求,根据需求写出代码,解决需求,本质就是这么简单,以上的内容你也能在c语言中实现,这确实,但是java这种面向对象编程里,能够让如:作业数量,在外面的控制范围内,让它不被其他情况污染,也方便我们后续进行变化,以及它能够将必要的内容进行隐藏,这也是封装的重要组成,不过现实的问题比我们现在的问题复杂得多,但面向对象设计能够让我们分而治之,更简单解决,同时各位能够注意到我是以行为为出发点,而不是以状态为起点,这在简单的项目,框架里并没什么问题,但这会导致你的代码模型出现冗余,不过只要能解决问题,就都是好的代码,只是如果你要在更大的公司,更好的框架,项目里完成有原子性和高聚性的代码模型,按照行为开始设计可能会更好一点

总结

对象到底是什么?其实就是状态与行为的结合,用来解决现实问题的一种抽象工具

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/885772.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XML 现实案例:深入解析与应用

XML 现实案例:深入解析与应用 XML(可扩展标记语言)自1998年成为W3C推荐标准以来,一直是数据交换和存储的重要工具。它是一种用于标记电子文件的结构化语言,使得数据不仅人类可读,而且机器可处理。本文将探讨XML在现实世界中的应用案例,展示其如何在不同领域中发挥作用。…

实习冲刺Day19

算法题 平衡二叉树 平衡二叉树也叫AVL树,它或者是一颗空树,或者具有以下性质的二叉排序树:它的左子树和左子树的高度之差(平衡因子)的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。 它具有一个左子树和一个右子树&a…

思科模拟器路由器配置实验

一、实验目的 了解路由器的作用。掌握路由器的基本配置方法。掌握路由器模块的使用和互连方式。 二、实验环境 设备: 2811 路由器 1 台计算机 2 台Console 配置线 1 根网线若干根 拓扑图:实验拓扑图如图 8-1 所示。计算机 IP 地址规划:如表…

Python酷库之旅-第三方库Pandas(206)

目录 一、用法精讲 961、pandas.IntervalIndex.mid属性 961-1、语法 961-2、参数 961-3、功能 961-4、返回值 961-5、说明 961-6、用法 961-6-1、数据准备 961-6-2、代码示例 961-6-3、结果输出 962、pandas.IntervalIndex.length属性 962-1、语法 962-2、参数 …

【前端】CSS入门笔记+案例

目录 CSS css 的语法 1.字体大小 font-size 2.背景颜色 backgrount-color 3.背景的宽高 w h css的三种引入方式 1.内嵌式 2.外联式 3.行内式 选择器 1.标签选择器 2.类选择器 3.id选择器 4.通配符选择器 字体和文本样式 1.字体样式 1.1字体大小 font-size 1.…

java对接微信公众号API,实现扫码关注公众号,触发多条消息回复

一、准备工作 1. 依赖库 这里使用的是binarywang的Wxjava 库&#xff0c;源码地址&#xff1a;https://github.com/binarywang/WxJava。截止发稿前最新版本是4.6.7.B&#xff0c;我采用的是4.5.0版本。 <dependency><groupId>com.github.binarywang</groupId…

一文学习Android中的Property

在 Android 系统中&#xff0c;Property 是一种全局的键值对存储系统&#xff0c;允许不同组件和进程间以轻量级的方式进行数据传递。它主要用于系统配置、状态标识等场景&#xff0c;使得不同进程能够通过属性的设置或获取来通信。property 的核心特性是快速、高效&#xff0…

网络编程——Python简单TCP通信功能代码实践

这里写目录标题 Python简单TCP通信功能代码实践阅读本博客前需准备的几个问题1. 网络通信的机制是什么&#xff1f;2. 什么是python进行网络编程&#xff1f;3. IP地址和端口是什么&#xff1f; 一个简单的TCP通信功能示例&#xff1a;client端.pysever端.pyPYCHARM运行结果 Py…

qt QGesture详解

1、概述 QGesture 是 Qt 框架中用于处理多点触控和手势识别的类。它封装了用户输入的手势信息&#xff0c;如触摸、滑动、捏合、旋转等&#xff0c;使得开发者能够轻松地实现复杂的手势交互功能。QGesture 类本身是一个抽象基类&#xff0c;不能直接实例化&#xff0c;而是通过…

基于C语言——跑得快扑克牌游戏开发指南

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 ✨特色专栏&#xff1a…

7+纯生信,单细胞识别细胞marker+100种机器学习组合建模,机器学习组合建模取代单独lasso回归势在必行!

影响因子&#xff1a;7.3 研究概述&#xff1a; 皮肤黑色素瘤&#xff08;SKCM&#xff09;是所有皮肤恶性肿瘤中最具侵袭性的类型。本研究从GEO数据库下载单细胞RNA测序&#xff08;scRNA-seq&#xff09;数据集&#xff0c;根据原始研究中定义的细胞标记重新注释各种免疫细胞…

CatBoost中的排序提升(Ordered Boosting)

排序提升&#xff08;Ordered Boosting&#xff09;是 CatBoost 的核心创新之一&#xff0c;用于解决梯度提升决策树&#xff08;GBDT&#xff09;在训练过程中可能产生的信息泄漏&#xff08;Information Leakage&#xff09;和预测偏移&#xff08;Prediction Shift&#xff…

丹摩征文活动 | 0基础带你上手经典目标检测模型 Faster-Rcnn

文章目录 &#x1f34b;1 引言&#x1f34b;2 平台优势&#x1f34b;3 丹摩平台服务器配置教程&#x1f34b;4 实操案例&#xff08; Faster-rcnn 项目&#xff09;&#x1f34b;4.1 文件处理&#x1f34b;4.2 环境配置&#x1f34b;4.3 训练模型&#x1f34b;4.4 数据保存并导…

【GPTs】Get Simpsonized:一键变身趣味辛普森角色

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | GPTs应用实例 文章目录 &#x1f4af;GPTs指令&#x1f4af;前言&#x1f4af;Get Simpsonized主要功能适用场景优点缺点使用方式 &#x1f4af;小结 &#x1f4af;GPTs指令 中文翻译&#xff1a; 指令保护和安全规则&…

【每日 C/C++ 问题】

一、什么是 c 命名空间 有什么作用&#xff1f; C命名空间是一种用于解决全局作用域&#xff08;如全局变量名或函数名&#xff09;的冲突问题的机制&#xff0c;是一种可以将全局作用域划分成不同区域的机制。 它可以将一组相关的变量、函数和类组织在一起&#xff0c;形成一个…

sqlserver删除最近2个月的记录

--上个月1号如 2024-10-01 00:00:00.000 select DATEADD(month, DATEDIFF(month, 0, GETDATE())-1, 0); -下个月1号如2024-12-01 00:00:00.000select DATEADD(month, DATEDIFF(month, 0, GETDATE())1, 0); --返回2024-11的格式select YearMonth from Dec_EPInventor…

【C++】 C++游戏设计---五子棋小游戏

1. 游戏介绍 一个简单的 C 五子棋小游戏 1.1 游戏规则&#xff1a; 双人轮流输入下入点坐标横竖撇捺先成五子连线者胜同一坐标点不允许重复输入 1.2 初始化与游戏界面 初始化界面 X 输入坐标后 O 输入坐标后 X 先达到胜出条件 2. 源代码 #include <iostream> #i…

树-好难-疑难_GPT

// // Created by 徐昌真 on 2024/11/10. // #include <iostream> using namespace std;template<typename T> struct ListNode{ //新建链表节点T data; //指向下一个子节点 ListNode< TreeNode<T>* > childHead; 这里的 T 是TreeNde类型的…

源代码加密技术对比:教你正确选择源代码加密方案

源代码加密技术对比&#xff1a;教你正确选择源代码加密方案 一、源代码加密技术概述 源代码加密旨在保护软件开发过程中的知识产权&#xff0c;防止源代码被盗用、篡改或逆向工程。随着开发环境日益复杂&#xff0c;选择合适的源代码加密解决方案显得尤为重要。在多样化的开…