Java编程思想 学习笔记1

一、对象导论

1.抽象过程
  Alan Kay曾经总结了第一个成功的面向对象语言、同时也是Java所基于的语言之一的Smalltalk的五个基本特性,这些特性表现了纯粹的面向对象程序设计方式
  1)万物皆对象
  2)程序是对象的集合,它们通过发送消息来告知彼此所要做的。要想请求一个对象,就必须对该对象发送一条消息。更具体的说,可以把消息想象为对某个特定对象的方法的调用请求。
  3)每个对象都有自己的由其他对象所构成的存储。换句话说,可以通过创建包含现有对象的包的方式来创建新类型的对象。
  4)每个对象都拥有其类型。按照通用的说法,“每个对象都是某个类(class)的一个实例(instance)”。每个类最重要的区别于其他类的特性就是“可以发送什么样的消息给它”。
  5)某一特定类型的所有对象都可以接收同样的消息

 2.每个对象都有一个接口
  所有对象都是唯一的,但同时也是具有相同的特性和行为的对象所属类的一部分。
  每个对象都只能满足某些请求,这些请求由对象的接口(interface)所定义。接口确定了对某一特定对象所能发出的请求。但是,程序中必须有满足这些请求的代码。这些代码和隐藏的数据一起构成了实现

3.每个对象都提供服务

  将对象想象成是”服务提供者“。这样做的好处之一:有助于提高对象的内聚性。高内聚是软件设计的基本质量要求之一:这意味着一个软件构件的各个方面”组合“的很好。

  我们经常遇到的问题是,将过多的功能都塞在一个对象里。在良好的面向对象设计中,每个对象都可以很好地完成一项任务,但是它并不试图做更多的事。

4.被隐藏的具体实现

 将程序开发人员按照角色分为**类创建者**和**客户端程序员**。客户端程序员的目标是收集各种用来实现快速应用开发的类。类创建者的目标是创建类,这种类只向客户端程序员暴露必需的部分,而隐藏其他部分。

访问控制的第一个存在原因就是让客户端程序员无法触及他们不应该触及的部分,让他们清晰地应用服务;第二个原因就是允许库设计者可以改变类内部的工作方式而不用担心影响到客户端程序员。

5.复用具体实现
  组合:使用现有的类合成新的类,经常被视为”has-a”关系。
  创建新类时优先选择组合。

 6.继承

  可以创建一个基类型来表示系统中某些对象的核心概念,从基类型中导出其他类型,来表示此核心可以被实现的各种不同方式。
  所有可以发送给基类对象的消息同时也可以发送给导出类对象。由于通过发送给类的消息的类型可知类的类型,所以这也就意味着导出类与基类具有相同的类型
  有两种方法可以使基类与导出类产生差异。第一种:直接在导出类中添加新方法。这意味着基类不能满足你的所有需求,因此必须添加新方法;第二种是改变基类的方法,即覆盖(override)
  “是一个”与“像是一个”关系
  is-a:继承只覆盖基类的方法,结果可以用一个导出类对象来完全替代一个基类对象。被视为纯粹替代。
  has-a:新类型具有旧类型的接口,但还包含其他方法,基类无法访问新添加的方法。

7.伴随多态的可互换对象
  在处理类型的层次结构时,通常想把一个对象不当作它所属的特定类型来对待,而是将其当作其基类的对象来对待。这样我们能编写出不依赖特定类型的代码。
  一个非面向对象编程的编译器产生的函数调用会引起所谓的前期绑定,这意味着编译器将产生对一个具体函数名字的调用,而运行时将这个调用解析到将被执行的代码的绝对地址。
  面向对象程序设计语言使用了后期绑定的概念。当对象发送消息时,被调用的代码直到运行时才能确定。编译器确保被调用方法的存在,并对调用参数和返回值执行类型检查,但是并不知道将被执行的确切代码。为了执行后期绑定,Java使用一小段特殊的代码来代替绝对地址调用。这段代码使用在对象存储的信息来计算方法体的地址。这样,根据这一小段代码的内容,每一个对象都可以具有不同的行为表现。当向一个对象发送消息时,该对象就能够知道这条消息应该做些什么。
  把导出类看做是它的基类的过程称为向上转型

8.单根继承结构
  所有类都继承自Object。
  单根继承结构保证所有对象都具备某些功能。
  单根继承结构使垃圾回收器的实现变得容易得多。

9.容器
  存储不定数量的对象。
  参数化类型
  Java SE5之前,容器存储的对象都只具有Java中的通用类型:Object。因为Object可以存储一切东西。但这种做法在涉及具体应用时则很危险,因为向下转型是不安全的,程序员需要花更多精力来处理正确的转型。
  参数化类型机制则可以解决此问题。参数化类型就是一个在编译中可以自动定制作用于特定类型上的类。称之为范型。

10.对象的创建和生命期
  怎样才能知道何时销毁这些对象?当处理完某个对象之后,系统某个部分可能还在处理它。
  对象的数据位于何处?怎样控制对象的生命周期?这里有两种方式:

  • 第一种是追求效率,对象的存储空间和生命周期可以在编写程序时确定,通过将对象置于堆栈(它们有时被称为自动变量或限域变量)或静态存储区域内来实现。
  • 第二种是在被称为堆的内存池中动态地创建对象。这样,直到运行时才知道需要多少对象、生命周期以及具体类型。

  因为存储空间是在运行时被动态管理的,所有需要大量的时间在堆中分配存储空间,这可能要远远大于在堆栈中创建存储空间的时间。在堆栈中创建存储空间和释放空间通常各需要一条汇编指令即可,分别对应将栈顶指针向下移动和将栈顶指针向上移动。创建堆存储空间的时间依赖于存储机制的设计。

  动态方式有这样一个一般性的逻辑假设:对象趋向于变得复杂,所以查找和释放存储空间的开销不会对对象的创建造成重大冲击。
  Java完全采用了动态内存分配方式。每当想要创建新对象时,就要使用new关键字来构建此对象的动态实例。
  对于允许在堆栈上创建对象的语言,编译器可以确定对象的存活时间,并可以自动销毁它。然而,如果是在堆上创建对象,编译器就会对它的生命周期一无所知。因此,Java提供了被称为“垃圾回收器”的机制,它可以自动发现对象何时不再被使用,并继而销毁它。

11.异常处理:处理错误
  大多数错误处理机制的主要问题在于,它们都依赖于程序员自身的警惕性,这种警惕性来源于一种共同的约定,而不是编程语言所强制的。
  异常处理直接把错误处理直接置于编程语言中,有时甚至置于操作系统中。
  注意,异常处理并不是面向对象语言的特征。

12.并发编程
  在计算机编程中有一个基本概念,就是在同一时刻处理多个任务的思想。许多程序设计问题都要求,程序能够停下正在做的工作,转而处理某个其他问题,然后再返回主进程。
  我们只需把任务切分成多个可独立运行的部分,从而提高程序的响应能力。在程序中,这些彼此独立运行的部分称之为线程,上述概念被称为“并发”。
  但有一个隐患:共享资源。如果有多个并行任务都要访问同一项资源,那么就会出问题。解决问题的方法是:某个任务锁定某项资源,完成其任务,然后释放资源,使其他任务可以使用这项资源。

13.Java与Internet
待补。。。。看不懂

14.总结

  Java程序中只包含以下两部分内容:用来表示问题空间概念的对象(而不是有关计算机表示方式的相关内容),以及发送给这些对象的用来表示在此空间内的行为的消息

  这一章的内容很广泛,还需要全面学习之后再回来总体把握精髓。

转载于:https://www.cnblogs.com/fht-litost/p/8306870.html

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

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

相关文章

不只是日志收集,项目监控工具Sentry的安装、配置、使用

前言上一篇文章介绍了ExceptionLess这个日志收集系统:ExceptionLess的安装、配置、使用由于ExceptionLess官方提供的客户端只有.Net/.NetCore平台和js的,本文继续介绍另一个日志收集系统:SentrySentry 是一个实时事件日志记录和聚合平台。&am…

64个数据分析常用术语

导读:本篇文章,我们来讲讲数据分析常用语。 内容综合整理自网络 01 绝对数和相对数 绝对数:是反应客观现象总体在一定时间、一定地点下的总规模、总水平的综合性指标,也是数据分析中常用的指标。比如年GDP,总人口等等。…

redis 的bitmap 开源包 bitmapist的应用

2019独角兽企业重金招聘Python工程师标准>>> 原理:http://my.oschina.net/u/1458120/blog/545224 bitmap包:https://github.com/Doist/bitmapist 要求redis> 2.6.0 bitmapist-master.zip 安装自己下载解压 python setup.py install &…

Django Views(视图函数)

http请求中产生两个核心对象: http请求:HttpRequest对象 http响应:HttpResponse对象 所在位置:django.http 之前我们用到的参数request就是HttpRequest 检测方法:isinstance(request,HttpRequest) 1 HttpRequest对象…

Android 4 +https(如何启动TLS1 1 and TLS1 2)

之前用的网络请求框架是鸿洋的OkHttpUtils,网络请求在5.0手机上使用https没有问题,但是最近突然使用了一个4.4的系统,就报错SSLException ....咋地咋地 然后 我们的副总给我们找一个博客,如何解决4.系统出现的这个问题&#xff0…

massCode 一款优秀的开源代码片段管理器

本文将介绍一款适合程序员使用的个人代码片段管理工具 massCode[1]。massCode小时候,也许我们每个人都会被老师要求有一个到处摘录优美句子段落的作文素材本 —— 采蜜集。不可否认,这对我们的写作水平的提高确实有很大的帮助。对开发人员来说当然也需要…

【ArcGIS Pro微课1000例】0021:Win10系统ArcGIS Pro3.0.1安装教程(附ArcGIS Pro下载)

本文讲解Win10系统上ArcGIS Pro3.0.1安装教程,附软件包下载。 文章目录 一、 软件安装步骤1. 安装.net Runtime 62. 安装ArcGIS Pro3. 安装中文语言4. 删除代理二、软件下载地址一、 软件安装步骤 [软件名称]: ArcGIS Pro 3.0.1 [软件大小]:4.33GB [安装环境]: Win 11/Win …

iOS逆向工程——非越狱调试

其实iOS的逆向分析业界已经十分成熟了,网上也有许多有趣的尝试(一步一步实现iOS微信自动抢红包(非越狱)。本文着重于如何在非越狱机器上进行调试,出于学习及总结的目的,记录于此。 本文以破解游戏梦幻西游为例,逐步讲解整个调试流…

[转]2022 Flutter 宣布发布 Windows 正式版

原文链接: https://medium.com/flutter/announcing-flutter-for-windows-6979d0d01fed 自从推出 Flutter 以来,我们一直专注于为漂亮的定制应用提供跨平台解决方案,这些应用被编译为机器代码并充分利用设备的底层图形硬件功能。 今天这一愿景…

电脑经常弹出“不支持的硬件”解决办法

电脑经常弹出“不支持的硬件”解决办法。 通过微软官方查证,这是由于以上处理器需要最新的Windows10系统才会这样子的,而大多出现该提示的都安装了Win7或是Win8.1系统。 来至微软官方的说明 此错误出现的原因是各代新处理器要求最新Windows版本以获得支持。 例如,Windows 1…

使用 Web API 上传和下载多个文件

原文作者:Jay Krishna Reddy原文链接:https://www.c-sharpcorner.com/article/upload-and-download-multiple-files-using-web-api/翻译:沙漠尽头的狼(谷歌翻译加持,文中版本使用.NET 6升级)---正文开始---…

详解T-SQL的联接机制

T-SQL的联接分三种类型: 交叉联接 ( cross join ) 内部联接 (inner join) 外部联接 (outer join) 每种联接在逻辑上经历不同的阶段,分为笛卡尔乘积、筛选、添加外部行,如图: 联接类型 阶段 交叉联接 笛卡儿乘积 内部联接…

Android FrameWork学习(一)Android 7 0系统源码下载 编译

最近计划着研究下 Android 7.0 的系统源码,之前也没做过什么记录,这次正好将学习的内容记录下来,方便以后复习巩固。 既然要学习我们的系统源码,那我们第一步要做的就是下载源码并进行编译了。 #硬件环境要求 ###1. 编译环境 按照…

【MapGIS精品教程】002:GDB本地数据库的使用

本文主要内容为MapGISGDB本地数据库的使用,包括:GDB企业管理器的认识、GDB本地数据库的创建方法、GDB本地数据库的备份和恢复。 1. GDB企业管理器的认识 GDB是地理数据的资源管理器,主要对空间数据进行有序组织与管理。 GDB数据管理包括&…

RabbitMQ学习3----运行和管理RabbitMQ

1.服务为管理 Erlang天生就是为了让应用程序无需知道对方是否存在同一台机器上即可互相通信。 Erlang节点:Erlang虚拟机的每个实例。多个Erlang应用程序可以运行在同一个节点之上。节点之间可以进行本地通信(不管他们是运行在同一台服务器之上&#xff0…

各代移动网络性能

摘自《中国元宇宙白皮书》 下载整书完整版https://www.aliyundrive.com/s/gXQvRLM22kD

EFCore高级Saas系统下单DbContext如何支持不同数据库的迁移

前言随着系统的不断开发和迭代默认的efcore功能十分强大,但是随着Saas系统的引进efcore基于表字段的多租户模式已经非常完美了,但是基于数据库的多租户也是可以用的,但是也存在缺点,缺点就是没有办法支持不同数据库,mi…

poj 1679: The Unique MST【次小生成树】

题目链接 参考博客 希望注释足够清楚。。欢迎指出不足~ #include<cstdio> #include<cstring> #include<algorithm> using namespace std;const int maxn110; const int INF0x3f3f3f3f;int n,m; int mp[maxn][maxn]; int maxlen[maxn][maxn]; //maxlen…

51. Python 数据处理(2)

1.Python 修改excel文件import xlrd import xlutils.copy excelr xlrd.open_workbook("hello.xlsx") excelw xlutils.copy.copy(excelr) sheet1 excelw.get_sheet(0) sheet1.write(3, 5, "xlutils.copy test test") excelw.save("hello.xlsx"…

人工智能十大流行算法

导读&#xff1a;本文为有志于成为数据科学家或对此感兴趣的读者们介绍最流行的机器学习算法。 作者&#xff1a;Fahim ul Haq 译者&#xff1a;刘志勇&#xff0c;策划&#xff1a;赵钰莹 来源&#xff1a;InfoQ&#xff08;ID&#xff1a;infoqchina&#xff09; 机器学习是…