【译文】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

相关文章

springboot控制bean的创建顺序

《springboot控制bean的创建顺序》本文主要介绍了spring-boot控制bean的创建顺序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录1、order注解(不一定有效)2、dependsOn注解(有效)3、提前将bean注册为Bea

Java中的ConcurrentBitSet使用小结

《Java中的ConcurrentBitSet使用小结》本文主要介绍了Java中的ConcurrentBitSet使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、核心澄清:Java标准库无内置ConcurrentBitSet二、推荐方案:Eclipse

java中的Supplier接口解析

《java中的Supplier接口解析》Java8引入的Supplier接口是一个无参数函数式接口,通过get()方法延迟计算结果,它适用于按需生成场景,下面就来介绍一下如何使用,感兴趣的可以了解一下... 目录1. 接口定义与核心方法2. 典型使用场景场景1:延迟初始化(Lazy Initializati

Java中ScopeValue的使用小结

《Java中ScopeValue的使用小结》Java21引入的ScopedValue是一种作用域内共享不可变数据的预览API,本文就来详细介绍一下Java中ScopeValue的使用小结,感兴趣的可以... 目录一、Java ScopedValue(作用域值)详解1. 定义与背景2. 核心特性3. 使用方法

spring中Interceptor的使用小结

《spring中Interceptor的使用小结》SpringInterceptor是SpringMVC提供的一种机制,用于在请求处理的不同阶段插入自定义逻辑,通过实现HandlerIntercept... 目录一、Interceptor 的核心概念二、Interceptor 的创建与配置三、拦截器的执行顺

Java中Map的五种遍历方式实现与对比

《Java中Map的五种遍历方式实现与对比》其实Map遍历藏着多种玩法,有的优雅简洁,有的性能拉满,今天咱们盘一盘这些进阶偏基础的遍历方式,告别重复又臃肿的代码,感兴趣的小伙伴可以了解下... 目录一、先搞懂:Map遍历的核心目标二、几种遍历方式的对比1. 传统EntrySet遍历(最通用)2. Lambd

Spring Boot 中 RestTemplate 的核心用法指南

《SpringBoot中RestTemplate的核心用法指南》本文详细介绍了RestTemplate的使用,包括基础用法、进阶配置技巧、实战案例以及最佳实践建议,通过一个腾讯地图路线规划的案... 目录一、环境准备二、基础用法全解析1. GET 请求的三种姿势2. POST 请求深度实践三、进阶配置技巧1

springboot+redis实现订单过期(超时取消)功能的方法详解

《springboot+redis实现订单过期(超时取消)功能的方法详解》在SpringBoot中使用Redis实现订单过期(超时取消)功能,有多种成熟方案,本文为大家整理了几个详细方法,文中的示例代... 目录一、Redis键过期回调方案(推荐)1. 配置Redis监听器2. 监听键过期事件3. Redi

Spring Boot 处理带文件表单的方式汇总

《SpringBoot处理带文件表单的方式汇总》本文详细介绍了六种处理文件上传的方式,包括@RequestParam、@RequestPart、@ModelAttribute、@ModelAttr... 目录方式 1:@RequestParam接收文件后端代码前端代码特点方式 2:@RequestPart接

SpringBoot整合Zuul全过程

《SpringBoot整合Zuul全过程》Zuul网关是微服务架构中的重要组件,具备统一入口、鉴权校验、动态路由等功能,它通过配置文件进行灵活的路由和过滤器设置,支持Hystrix进行容错处理,还提供... 目录Zuul网关的作用Zuul网关的应用1、网关访问方式2、网关依赖注入3、网关启动器4、网关全局变