Java对象导论

news2024/11/17 10:47:17

对象具有状态、行为和标识。每个对象都可以拥有内部数据(它们给出了该对象的状态)和方法(它们产生的行为),并且每个对象在内存中都有一个唯一的地址(标识)。

抽象过程就是在问题空间元素和解空间的对象之间创建一对一的映射。

1 对象是服务提供者

程序本身将向用户提供服务,它将通过调用其他对象提供的服务来实现这一目的。

通过某种方式产生对对象的请求,使对象完成各种服务。比如让灯泡发光,灯泡提供发光、熄灭两种服务。每个对象都只能满足某些请求,这些请求也称为对象的接口。

图 灯泡提供的服务

接口确定了对某一特定对象所能发出的请求。

当向对象发送请求时,与之关联的方法就会被调用,这个过程概括为:向某个对象“发送消息”(产生请求),这个对象便知道此消息的目的,然后执行对应的程序代码。

1.1 将问题分解为对象集合

我们需要开发一个简单的学生成绩录入系统。需要能录入学生的成绩、能查询某一学生的成绩等。

服务提供者

问题

学生

获取学生成绩信息(分数+姓名)

成绩存储器

存储学生成绩信息

查询学生成绩

表 学生成绩录入系统问题与服务分析

图 学生成绩录入系统UML图

每个对象都很好地完成一项任务,但它并不试图做更多的事。在设计一个类的时候,一个类只负责一个功能领域中的相应职责。

2 代码的复用

一旦类被创建并被测试完,那么它就应该代表一个有用的代码单元,就应该可以被其他类复用。

2.1 组合

最简单复用某个类的方式是直接使用该类的一个对象,也可以将这个对象置于某个新类的成员对象中。新的类可以由任意数量、任意类型的其他对象以任意可以实现新类中想要的功能的方式所组成,这种概念被称为组合。

组合经常被视为“has-a”关系。就像人拥有鼻子一样。

在建立新类时,应该首先考虑组合,它更加灵活,会让设计变得更加清晰。

2.2 继承

在现实世界中,存在着许多的继承关系,比如人类属于动物,人类继承了动物的许多特性,比如移动move, 吃东西 eat等。在计算机这个解空间中,我们先创建好动物这个类型Animal,在创建人类People这个类型的时候,因为Animal的所有状态与行为人类都有,这时我们可以直接继承Animal。

图 人类与动物的继承关系

2.2.1 “is-a”与 “is-like-a”

“is-a”: 如果导出类只覆盖基类的方法,而不添加新的服务,这意味着导出类和基类是完全相同的类型,因为它们具有完全相同的接口。可以用导出类对象来完全替代一个基类对象。这通常被称之为替代原则。

“is-like-a”: 会在导出类中添加新的方法。比如在人类People这个导出类中,我们会添加新的接口:think()思考。我们就说,People is like a Animal。人像是一种动物。

假如我们有个系统模拟原始社会的,在原始社会中,所有动物都会行走与吃东西,但唯独不会思考。在这系统中,万物平等,都是可以互相替代的(因为行为是一样的),有一天,人类开始进化,学会了思考,于是人类开始变得独一无二,这时,人类将不能被其他动物给代替了。

2.2.2 多态

当向对象发送消息时,被调用的代码直到运行时才能确定。编译器确保被调用方法的存在,并对调用参数和返回值执行类型检查。但是并不知道将被执行的确切代码。

图 人与鱼的动态行为

3 被隐藏的具体实现

将开发人员按角色划分为类创建者(构建类)和客户端程序员(使用类)。创建类时只暴露给客户端程序员必需的部分,而隐藏其他部分。这么做有以下的好处:

1)创建者可以任意修改被隐藏的部分,而不用担心对其他任何人造成影响。

2)通常隐藏的部分是对象内部脆弱的部分,容易被客户端程序员毁坏。

public

对任何人都是可用的。

private

除类型创建者和类型的内部方法之外的的任何人都不能访问。

protected

继承类可以访问

默认的访问权限

包访问权限,可以被同一个包中其他类访问。而不能被包外的访问。

表 Java控制访问权限的四种类似

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

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

相关文章

Macbook下提升开发效率的几个小工具

最近倒腾mac笔记本,记录下一些高效率的工具吧。 首先就是alfred,内置可以自定义各种快捷命令查找,配合Dash来快速查找C系统API,其实Dash中包含了各种编程所需API文档,值得下载。 以前我都是直接查看cppreference.c…

【分享】Redis的五种基本数据类型和应用场景

前言: Redis支持五种基本数据类型: String(字符串类型):可以是普通字符串,也可以是整数或浮点数值。可以设置过期时间;可以对字符串进行append、get、set、incr、decr等操作。Hash&#xff08…

【C++】位图和布隆过滤器

文章目录 位图概念难点代码 布隆过滤器概念插入查找删除优缺点代码 位图 概念 所谓位图,就是用每一个比特位位来存放某种状态,适用于海量数据,数据无重复的场景。通常是用来判断某个数据存不存在的。 给40亿个不重复的无符号整数&#xff…

buu_Misc总结2

目录 百里挑一 exiftool: [SUCTF2018]followme grep工具使用: [安洵杯 2019]Attack mimikatz工具使用: 百里挑一 打开文件是流量包,发现里面有很多图片 导出http 另存一个文件夹,里面很多图片,啥也看不出来 &…

医用影像技术

1.X光和CT原理 X光和CT(计算机断层扫描)都是医学成像技术,用于诊断和治疗。它们的原理如下: X光原理: X光是一种电磁辐射,与可见光类似,但具有更高的能量。当X光通过人体或物体时,…

创作一周年纪念日【道阻且长,行则将至】

✨个人主页: 北 海 🎉所属专栏: 技术之外的往事 🎃所处时段: 大学生涯[1/2] 文章目录 一、起点一切皆有定数 二、成果尽心、尽力 三、相遇孤举者难起,众行者易趋 四、未来长风破浪会有时,直挂云…

[MySQL]MySQL表中数据的增删查改(CRUD)

[MySQL]MySQL表中数据的增删查改(CRUD) 文章目录 [MySQL]MySQL表中数据的增删查改(CRUD)1. 新增数据1.1 单列插入1.2 多列插入1.3 插入否则更新1.4 替换 2. 基本查询数据2.1 全列查询2.2 指定列查询2.3 查询字段为表达式2.4 为查询结果指定别名2.5 结果去重2.6 where子句2.7 or…

修复漏洞(二)离线升级Tomcat版本

前言 生产环境无法联网,只能通过下载离线版本更新Tomcat到小版本最新注意Tomcat10和11与jdk1.8都不兼容,只能更新到小版本的最新前提是按照我这种方法配置Tomcat开机自启的https://blog.csdn.net/qq_44648936/article/details/130022136 步骤 备份整个…

IAR编译报错:Error[Pe065: expected a “.“ and Error[Pe007]:unrecognized token

IAR报错 Error[Pe065: expected a “.” and Error[Pe007]:unrecognized token 使用IAR编译报如下错误: 找到软件报错的地方,从肉眼看,并没有错误的地方,如下图所示: 这时肯定是丈二和尚摸不着头脑,这里…

VMware种ubuntu22.04挂载ax88179网卡不显示的问题

网上找了很多解决办法,都说是驱动的问题,其实不是。ubuntu22自带无bug的ax88179的驱动。 其实是Vmware的问题,在虚拟机设置种添加一个usb控制器,然后这样设置就好了。

HCIP第一课实验小练习

目录 题目:​编辑 第一步:地址规划(子网划分) 第二步:设计拓扑并规划地址配置 第三步:VLAN规划配置 LW1 LW2 第四步:网关配置 第五步:及静态路由配置 第六步防止成环 题目&…

深入理解Linux网络——TCP连接建立过程(三次握手源码详解)

文章目录 一、相关实际问题二、深入理解listen1)listen系统调用2)协议栈listen3)接收队列定义4)接收队列申请和初始化5)半连接队列长度计算6)小结 三、深入理解connect1)connect调用链展开2&…

单片机第一季:零基础6——按键

目录 1,独立按键 2,矩阵按键 (注意:文章中的代码仅供参考学习,实际使用时要根据需要修改) 1,独立按键 按键管脚两端距离长的表示默认是导通状态,距离短的默认是断开状态&#xf…

用PuTTY作为telnet客户端

PuTTY工具可以作为telnet客户端使用。 打开PuTTY,输入telnet服务器的ip地址、端口号,选择Other,然后点击Open,就可以了:

C# Modbus通信从入门到精通(2)——Modbus RTU协议原理

Modbus RTU是串行链路上的协议,也就是说Modbus RTU是通过串口通信来实现的,它可以通过RS232、RS485物理层的接口来实现,同时它也是一个主从协议,在同一时间总线上只能有一个主站和一个或多个(最多247)个从站。Modbus通信总是由主站发起,从站没有接收到主站的请求时不会发…

【Maven三】——maven生命周期和插件

系列文章目录 Maven之POM介绍 maven命令上传jar包到nexus 【Maven二】——maven仓库 maven生命周期和插件 系列文章目录前言一、什么是生命周期&why1.三套生命周期2.clean生命周期3.default生命周期4.site生命周期5.命令行与生命周期 二、插件目标三、插件绑定1.内置绑定2…

大华智慧园区综合管理平台RCE漏洞复现(0day)

0x01 产品简介 “大华智慧园区综合管理平台”是一款综合管理平台,具备园区运营、资源调配和智能服务等功能。平台意在协助优化园区资源分配,满足多元化的管理需求,同时通过提供智能服务,增强使用体验。 0x02 漏洞概述 大华智慧园…

基于PyTorch实战权重衰减——L2范数正则化方法(附代码)

文章目录 0. 前言1. 权重衰减方法作用2. 权重衰减方法原理介绍3. 验证权重衰减法实例说明3.1 训练数据样本3.2 网络模型3.3 损失函数3.4 训练参数 4. 结果对比5. 源码 0. 前言 按照国际惯例,首先声明:本文只是我自己学习的理解,虽然参考了他人…

Java 设计模式——迭代器模式

目录 1.概述2.结构3.案例实现3.1.抽象迭代器3.2.具体迭代器3.3.抽象聚合3.4.具体聚合3.5.测试 4.优缺点5.使用场景6.JDK 源码解析——Iterator 1.概述 迭代器模式 (Iterator Pattern) 是一种行为型设计模式,它提供一种顺序访问聚合对象(如列表、集合等&…

JVM学习之内存与垃圾回收篇1

文章目录 1 JVM与Java体系结构1.0 Java发展重大事件1.1 虚拟机和Java虚拟机1.3 JVM整体结构1.4 Java代码执行流程1.5 JVM架构模型1.6 JVM的生命周期1.7 JVM发展历程 2 类加载子系统2.1 ClassLoader2.2 用户自定义类加载器2.2.1 为什么需要自定义类加载器2.2.2 自定义类加载器的…