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

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

hdu 2602 and poj 3624(01背包)

01背包的模板题。 hdu2602代码: #include<stdio.h>#include<string.h>const int MaxN = 1001;int max(int a, int b){return a > b ? a : b;}int w[MaxN];int v[MaxN];int dp[MaxN];int main(){int T;int N, V;s