【译文】Thinking In Java (Introdution To Objects_The Progress of abstraction)01

2023-10-19 08:18

本文主要是介绍【译文】Thinking In Java (Introdution To Objects_The Progress of abstraction)01,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

                       身为一名合格的攻城狮能够编写程序是远远不够的,英文文献的阅读能力也是很重要的.如果在看懂的基础上还可以进行翻译,那无疑是更好的.于是我选择了一篇经典的《Thinking In Java》开始了我的英语学习之旅。并附上单词学习pdf图片与文字,供以后复习。

extrinsic                   外部

a side effect                副作用

alternative to               替代于

ultimately                  最终的

algorithmic                 算法的

constraint – based           基于强制

exclusively                  仅仅

manipulate                  处理

restrictive                   限制

domain                      领域

object-oriented                面向对象

represent                   描述

constraint                   限制

flexible                     灵活

analogy                     类比

summarize                   总结

Smaltalk                    程序

Variable                    变量

Component                 要素

Parlance                    术语

Synonymous                同义

Be guaranteed to             肯定会

Succinct                     简明

Concrete                     具体的

(concrete action)具体形状

Sense                      理解

Simulation                   模仿

Numerous                   很多

Account                     账户


《`

抽象的进步


      所有程序语言都提供抽象概念。可以认为,你所解决问题的难以程度,直接取决于

计的抽象方法的种类和质量。我所指的“种类”,是指“你正在以什么为抽象?“汇编语言是对底层机器很小的抽象。那些称之为”命令”语言的语言,比如FORTRANBASICC,都是对汇编语言的抽象。对于汇编语言,这些语言无疑是巨大的进步,但是这些语言的基础抽象概念还是需要你去根据机器结构进行抽象,而不是根据你要解决问题的本身进行抽象。程序验必须建立基于“机器模型”和“解决问题模型”的抽象联系;其中机器模型是指,在你的方案空间,也就是你要处理实施执行这个问题的地方,比如电脑;“解决问题模型”空间,也就是那个问题存在的地方,比如你的业务。这就需要攻城狮做出极大的努力,然而事实上,做出的这些努力都是与程序编写无关的外部内容。这样的程序难于编写并且难于维护。由此而产生的副作用便是创造了“程序方法”这门学科。

        替代机器模型的另一种方法,就是建立解决问题模型。早期语言,例如LISPAPL选择了一特殊角度看世界(所有问题最终都归于列表,或说所有问题最终都归于算法。)Prolog把所有问题都归于决策链。这些语言的程序创建都是基于强制性的,并且这些程序仅仅能处理图形符号。(后者更加具有限制性)基于本来就要用这些方法解决

的问题,他们显得很棒;但是当你跳出这个领域,他们就显的笨拙了。

          面向对象的方法,给攻城狮提供了工具,让其可以在问题空间中把要解决的问题

描绘成一种元素,而这正式正中方法进步的地方。这种描述很广泛,不会让攻城狮受限于问题的种类。我们把问题空间的元素,和他们在方案空间所代表的物体,成为“对象”。当然也有一些对象在问题空间没有与之对应的类。程序为了解决问题,允许其自身接受新的类型对象不断调整。所以当你阅读解决方案的代码时,也就是你在阅读这个问题本身。对比于之前的语言,这是一个更灵活更nb的抽象语言。因此,面向对象的程序允许你基于问题本身描述问题,而不是描述计算机如何运行这个解决方案。不过他也有和计算机相联系的地方:也就是,每一个对象都像一个小型计算机——他有状态也有操作,并且你可以让他去实施。无论如何【thisdoesn't seem like such a bad analogy to objects in the realworld,他们都有自己的属性和行为。


       AlanKay总结了程序的五种基本特点。第一个成功的面向对象语言,并且Java

是基于这个编写的。这些方法代表了纯粹的面向对象编程方法。:

1.所有东西都是对象 把对象想象成一种奇特的变量,它储存着数据,不过你可以作出要求,然她展现自身的操作。理论上讲,你可以把所有你要解决问题里的概念性的组件(比如狗,建筑,服务,等等)在程序中将其表达为一个对象。

2.程序是一堆对象的组合,通过发送信息,告诉彼此应该做什么。为了向对象提出请求,需要给该对象发送信息。更确切的讲,你可以把信息当做调用该对象特有的方法。

3.每一个对象都是由其他对象组成的储存空间。 用另一种方法讲,你创建的新的对象其

实就是把其他对象放到一个包里建立出来的。因此,尽管对象很简单,你也可以在程序

中建立起相当复杂的东西。

4.每一个对象都有一个类(type)。 用术语讲,每个对象(instance)都是类class)的实例,这里的类(class)和(type)是同义的。一个类的最重要的属性区别就是,他能接收什么信息。

5.基于同一个类的对象可以接收相同的信息。这实际是一种【loadedstatement,你在不就就会理解看到。圆这个类实际上也是形状这个类,一个圆肯定可以接收形状的信息。这也就意味着,你只需要编写形状这个代码,就可以自动控制符合形状描述的其他对象。【substituability】是面向对象的重要概念之一。


Booch给对象提供了一种更为简洁的描述:

"一个对象具有状态,行为和定义”

这也就意味着一个对象具有内在的数据(赋予它状态),方法(提供行为),并且每一个对象都是独特的以和其他对象区分开——具体的理解也就是,每一个对象在内存中都有一个特定的地址。




这篇关于【译文】Thinking In Java (Introdution To Objects_The Progress of abstraction)01的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/238536

相关文章

Java Predicate接口定义详解

《JavaPredicate接口定义详解》Predicate是Java中的一个函数式接口,它代表一个判断逻辑,接收一个输入参数,返回一个布尔值,:本文主要介绍JavaPredicate接口的定义... 目录Java Predicate接口Java lamda表达式 Predicate<T>、BiFuncti

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Spring Security方法级安全控制@PreAuthorize注解的灵活运用小结

《SpringSecurity方法级安全控制@PreAuthorize注解的灵活运用小结》本文将带着大家讲解@PreAuthorize注解的核心原理、SpEL表达式机制,并通过的示例代码演示如... 目录1. 前言2. @PreAuthorize 注解简介3. @PreAuthorize 核心原理解析拦截与

一文详解JavaScript中的fetch方法

《一文详解JavaScript中的fetch方法》fetch函数是一个用于在JavaScript中执行HTTP请求的现代API,它提供了一种更简洁、更强大的方式来处理网络请求,:本文主要介绍Jav... 目录前言什么是 fetch 方法基本语法简单的 GET 请求示例代码解释发送 POST 请求示例代码解释

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

Java利用docx4j+Freemarker生成word文档

《Java利用docx4j+Freemarker生成word文档》这篇文章主要为大家详细介绍了Java如何利用docx4j+Freemarker生成word文档,文中的示例代码讲解详细,感兴趣的小伙伴... 目录技术方案maven依赖创建模板文件实现代码技术方案Java 1.8 + docx4j + Fr

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

基于SpringBoot+Mybatis实现Mysql分表

《基于SpringBoot+Mybatis实现Mysql分表》这篇文章主要为大家详细介绍了基于SpringBoot+Mybatis实现Mysql分表的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录基本思路定义注解创建ThreadLocal创建拦截器业务处理基本思路1.根据创建时间字段按年进