热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java什么是原对象(PLc结构化变量编程)

很久以前,软件开发的世界还是一片浑浑噩噩,不管开发什么软件都面临着复杂性这个问题,代码里面到处是goto语句,程序的流程随意跳转。很多程序员写代码时,经常会遇到,越写到后面越不知道


在很久以前,软件开发的世界还是一团泥,无论开发什么软件都面临着复杂性的问题。 代码中充满了goto语句,程序流随意乱飞。 很多程序员写代码的时候,经常遇到。 越往后写,就越不知道自己在写什么。 就在这时,巨人出现了。 那就是“结构化编程”。


「结构化编程」基本思想有序控制进程,即将程序的执行顺序限制为顺序、分支、循环三种; 将共同的处理总结成例行程序(函数)。 「结构化编程」好处三大限制:三大限制意味着结构化编程只存在三种基本结构。 这三个基本结构分别是顺序结构、循环结构和分支结构。 这三种结构有共同的特点,只允许一个一个流动的出口和入口。 这样可以降低程序的自由度,减少各种组合,但不会使程序过于复杂。 另外,在降低程序复杂性的情况下,程序的实现能力没有降低。 例行程序(函数) :不需要知道“黑匣子化”这个进程内部的详细信息,只需要知道进程(函数)的名称。 # # PGC-card.PGC-card-href {文本修饰3360非}; outline :无; 显示:块; width :百分之百; height: 100%; # # PGC-card.PGC-card-href :移动器{文本修饰3360非}; (/)个人电脑样式(/.PGC-card )机箱大小调整:边框; height: 164px; 订单: 1px固态# e 8e8e 8; 位置:相对关系; 添加: 20px 94px 12px 180 px; 溢流:隐藏; PGC -卡:3360后{内容: ' '; 显示:块; 左: 1px固态# e 8e8e 8; height: 120px; 位置:绝对; right: 76px; top: 20px; PGC-cover {位置: absolute }; width: 162px; height: 162px; top: 0; left: 0; 后台大小:防护罩; PGC -内容{溢流:隐藏区}; 位置:相对关系; top: 50%; - WebKit -转换3360转换y (-50 %; 变换:变换y (-50 %; PGC -内容标题字体大小:18 px; 颜色: # 222; 线高度: 1; 字体:粗体; 溢流:隐藏; 文本溢出: Ellipsis; 空白: nowrap; PGC -内容桌面字体大小:14 px; 颜色: # 444; 溢流:隐藏; 文本溢出: Ellipsis; 顶级: 9px; 溢流:隐藏; 线高度: 1.2 em; 显示:-WebKit -在线盒; -webkit-line-clamp: 2; - WebKit-box-orient :垂直版; PGC -内容价格字体大小:22 px; 颜色: # f 85959; 顶级: 18px; 线高度: 1em; PGC -卡总线{ width : 75px }; 位置:绝对; right: 0; top: 50px; 颜色: # 406599; 字体大小: 14px; 文本对齐:中心; PGC-buy-text {填充-顶级:10 px; PGC

-icon-buy { height: 23px; width: 20px; display: inline-block; background: url(https://lf1-cdn-tos.bytescm.com/obj/cdn-static-resource/pgc/v2/pgc_tpl/static/image/commodity_buy_f2b4d1a.png); } 面向对象是怎样工作的 第2版(图灵出品) ¥57.8 购买

虽然结构化解决了程序控制流的复杂问题,但程序里面不仅包括控制结构,还包括要处理的数据。随着处理数据的增加,程序的复杂性也会上升。这时候,面向对象来了!

起初,“面向对象”只是是指在程序设计中采用封装、继承、多态等设计的方法。现在,面向对象的思想已经涉及到软件开发的各个方面。如,面向对象的分析(OOA,ObjectOriented Analysis),面向对象的设计(OOD,Object Oriented Design)、以及面向对象的编程实现(OOP,Object Oriented Programming)。

面向对象编程来自于“分别管理程序处理内容和处理数据对象所带来的复杂性”,可问题是,为了得到正确的结果,必须保持处理和数据的一致性,这在结构化编程中是非常困难的,解决这一问题的方案就是数据抽象技术。

数据抽象是数据和处理方法的结合,这便是最初“对象”一词的得来,面向对象编程也因此而得名。

然后,从抽象原则来说,多个相同事物出现时,应该组合在一起,即DRY原则(Don't Repeat Yourself),便又引出了类这一概念。

其中对象是用于计算机语言对问题域中事物的描述,对象通过“属性(attribute)”和“方法(method)”来分别对应事物所具有的静态属性和动态属性。他可以是人们要进行研究的任何事物,不仅能表示具体的事物,还能表示抽象的规则、计划或事件。对象具有状态,一个对象用数据值来描述它的状态;对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中。

类则是用于描述同一类的对象的一个抽象的概念,类中定义了这一类对象所具有的静态属性和动态属性具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型。类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。

类可以看成一类对象的模板,对象可以看成该类的一个具体实例。打个比方:生产每辆汽车都要按照图纸,经过生产组装,最终加工而成。而同样的车型,原始的生产图纸是同一个。那么这张生产图纸就相当于类。而生产出的具体的每辆车就相当于对象。类有一个,根据类实例化的对象可以有多个。所以我们可以理解为类的实例化的结果就是对象,而对对象的抽象就是类,类描述了一组有相同特性(属性)和相同行为的对象。

参考文献:面向对象(OOP)的进一步理解_low5252的博客-CSDN博客

类的三种功能

这里,我们将类的功能总结为汇总、隐藏和“创建很多个”。

汇总子程序和变量。隐藏只在类内部使用的变量和子程序。从一个类“创建很多个”实例。

类结构本身并不难,但它却能给编程带来很多积极的效果,可以说是种非常强大的结构。

类的功能一:汇总

类能汇总变量和子程序。这里所说的变量是指 C 和 COBOL 等语言中的全局变量。OOP中将由类汇总的子程序称为方法,将全局变量称为实例变量(又称为“属性”“字段”),之后我们会根据情况使用这些术语。

汇总的效果并不是减少整体构件的数量,举例来说一个家庭中所有成员的名字应该都不相同,但是和姓氏不同的邻居家的家庭成员重名则没有关系。

类的功能二:隐藏

我们借用《面向对象是怎样工作的》中的这张图来说明。

图中子程序和全局变量都汇总到了类中。但是在这种状态下,从类的外部仍然可以访问fileNO变量TextFileReader类的open,read和close方法会访问fileNO变量,但其他处理则无需访问因此最好限定为只有这三个方法能访问该变量。这样一来,当 fileNO变量中的值异常而导致程序运行错误时,我们只要调查这三个方法就可以了。另外,以后在需要将 fileNo变量的类型由int改为long等时,还可以缩小修改造成的影响范围。

类的功能三:创建很多个

类的这个功能总结起来就是八个字——“指定实例,调用方法”。

关于指定实例我们以动物为例,将狗作为类,将斑点狗和柴犬等具体的狗当作实例。不过实例并不是直接表示现实世界存在的事物结构,而是类定义的实际变量所持有的内存区域。另外定义了类就可以在运行时创建多个实例,也就是说能够确保多个内存区域。

关于调用方法:如果同时创建多个实例,那么在调用方法时就不知道到底哪个实例变量才是处理对象了,因此OOP的方法调用代码的写法稍微有点特殊。

在传统的子程序调用的情况下,只需简单地指定所调用的子程序的名称。而在OOP中,除了调用的方法名之外,还要指定对象实例。根据Java语法,应在存储实例的变量名后加上点,然后再写方法名,如下所示。

存储实例的变量名.方法名(参数)

基于这两点就可以指定哪个实例变量是处理对象。

根据“创建很多个”的结构,类中方法的逻辑就变得简单了。定义类的一端完全无须关心多个实例同时运行的情形。传统的编程语言中没有这种结构,所以要想实现同样的功能,就需要使用数组等结构来准备所需数量的变量区域,因此执行处理的子程序的逻辑也会变得很复杂。

一般来说,由于在应用程序中同时处理多个同类信息的情况很普遍,所以这种结构是非常强大的。文件,字符串,GUI中的按钮和文本框,业务应用程序中的顾客、订单和员工,以及通信控制程序中的电文和会话等,都会应用这样的结构,而OOP仅通过定义类就可以实现该结构,非常方便。(节选自《面向对象是怎样工作的》)

如今,面向对象已成为软件开发领域不可或缺的技术,这种现状会持续到什么时候呢?毕竟在软件领域,新技术时而出现、时而消失也是常有的事。

虽然应用面向对象的产品和技术就像雨后春笋一样不断涌现,但面向对象的根本内容在过去20多年基本上没有什么变化。编程语言的结构由967年的 Simula67 和20世纪70年代的Smalltalk确立,类库和框架等大规模软件构件群在20世纪80年代出现,设计式和作为UML前身的图形表示在20世纪90年代初出现。如今的面向对象只不过是对它们进行了提炼和普及而已。在今后10年,即使这些技术再进行扩展,其基本结构也不会发生较大改变。

所以,面向对象不会掀起一阵热潮后就凄凉收场,今后10年仍会继续占据主导地位。因此,对于面向对象的学习,对于软件开发领域的同学来说还是比较重要的。人邮君在这里向大家推荐这本《面向对象是怎样工作的》。

这本书被称为“计算机程序设计思想”图解趣味版,通俗易懂地介绍了面向对象的各种技术。相信通过阅读本书,大家应该可以从Java和Ruby等编程语言,以及使用UML的设计等面向对象的“表象”中探索到更加朴素的“本质”,对面向对象有新的理解。


推荐阅读
  • Unit4博客&课程总结Unit4作业的架构设计本单元作业的设计我分为了三个模块处理:模型构建+预处理+任务函数,前两部分即为整个图的完整构建,第三部分即为实现题目要求的查询方法。 ... [详细]
  • 开发笔记:里氏替换原则
    本文由编程笔记#小编为大家整理,主要介绍了里氏替换原则相关的知识,希望对你有一定的参考价值。1.定义:如果对每一个类型为T1的对象o1,都有类型为T2的对象o2, ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 2022年的风口:你看不起的行业,真的很挣钱!
    本文介绍了2022年的风口,探讨了一份稳定的副业收入对于普通人增加收入的重要性,以及如何抓住风口来实现赚钱的目标。文章指出,拼命工作并不一定能让人有钱,而是需要顺应时代的方向。 ... [详细]
  • 从高级程序员到CTO的4次能力跃迁!如何选择适合的技术负责人?
    本文讲解了从高级程序员到CTO的4次能力跃迁,以及如何选择适合的技术负责人。在初创期、发展期、成熟期的每个阶段,创业公司需要不同级别的技术负责人来实现复杂功能、解决技术难题、提高交付效率和质量。高级程序员的职责是实现复杂功能、编写核心代码、处理线上bug、解决技术难题。而技术经理则需要提高交付效率和质量。 ... [详细]
  • IT联合协会创始人分享的学习、创业和人生感悟
    本文分享了IT联合协会创始人的学习、创业和人生感悟,包括创办协会的经历、参与的比赛和活动、所关注的领域以及一些高效技巧。创始人强调了大学和工作前几年的学习资源的重要性,以及沉淀个人学习、生活和灵感资源对于大学和职场能力的影响。他还分享了自己关注的领域,包括软件开发和产品经理相关的专业方向。文章最后,他表达了对未来的期望和目标,并邀请有缘人一起交流。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 【blockly教程】第五章 循环结构
    在这里,我们将介绍一个新游戏--PondTutor在PondTutor(https:blockly-games.appspot.compond-tutor)这个游戏中 ... [详细]
author-avatar
honey爱一个人好难
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有