网站首页 > java教程 正文
1 抽象化
编程语言都是实际问题的抽象。而问题的复杂性取决于抽象的类型和质量。
1.1 OOP 中的对象是用来作甚的?
程序可以通过添加新的对象使自身更适用于某特定问题。因此阅读代码其实也就是在阅读问题的描述。
1.2 OOP编程的基本特性:
- 万物皆对象
- 程序就是对象的集合,他们通过发送消息来通知彼此要做什么
- 每个对象都有自身的由其他对象所构成的存储,比如组合
- 每个对象都是某个类的实例
- 某一特点类型的所有对象都能接收同样的消息
2 每个类都有接口(Java 中的API)
在程序执行期间具有不同的状态而其他方面都相似的对象会被分组到对象的类中,这就是 class 关键字的由来。
类描述了具有相同特性(数据元素)和行为(功能)的对象集合,所以类其实就是一个数据类型。
任何程序都是所设计系统的一种仿真,OOP 就能将大量问题降解为很简单的解决方案。
但是 OOP 的挑战之一就是建立问题空间的元素和解空间之间的对象的一一映射。
2.1 那到底怎么才能获得有用的对象?
这必须有某种方式可以产生对对象的请求,通知它去完成所需任务。每个对象只能满足某些特定的请求,而这些请求呢?就由接口所定义,决定接口的是类型。
接口确定了对某特定对象所能发出的请求。
3 每个对象都提供服务
将对象看做服务的提供者,程序本身就是向调用者提供服务的,而 app 就是通过调用其他对象所能提供的服务来实现这一目的。
3.1 解决你的问题又需要什么样的服务提供才能满足?
是不是可以通过加工组合当前这些对象已有的服务,来构建未来的服务满足你。构想完之后,就是你该写代码的时刻了。
3.2 提高对象的内聚性
不要妄图一个对象满足了你所有想象,这么多功能对于一个对象来说太多了,对象内部关系复杂之后也将使得 SE 们也难以理清关系,就像一个文件写了几千行,真是吐了!
每个对象都该有其所能提供服务的内聚的集合。优秀的 OOP 设计,每个对象都能很好做好一件事,而不是想着同时做好很多事,那样在现实中往往是同时很多事都做不好。
4 访问控制 - 隐藏具体实现
SE 分为类创建(负责创建新的数据类型)和客户端程序员(只管在其应用中使用数据类型的类消费者)。
4.1 客户端程序员的禁地
类创建者可以隐藏对象内部脆弱部分,不让其被客户端程序员访问到,这至少很大程度上能减少 bug
4.2 允许库设计者自由地改变内部的工作方式而无需担心影响到客户端程序员的用户体验
比如说为了上线某功能,先简单实现,之后有问题再继续升级,而无需一开始就考虑地面面俱到(谁会预料到客户会干出啥莫名其妙之事呢)。
5 复用
复用性的操作难度很难控制,需要大量经验,但不可否认好的复用性是 OOP 设计的奇妙之处。
最简单复用 - 直接使用该类的一个对象,也可将那个类的一个对象置于其他某个新的类中(比如 HashSet 直接复用 HashMap 成员对象),这便是组合(动态发生的组合称为聚合),一种 has - a 关系。
组合有着极大灵活性,是继承所不能比的。成员对象通常 private 保证私密性,,不会干扰客户端代码,还能动态修改组合对象,以实现动态修改程序的行为。
建立新类时,优先考虑组合,因为更简单灵活,而且设计更加清晰。当然这也需要大量经验,才能看出何时无可奈何只能选择继承。
6 继承
创建了一个类后,即使另一个新类与其很相似,还是得重建这个新类。如果能复制现有的类,通过添加修改一顿操作适配成一个新类是不是容易多了?这就是继承。
父类包含了所有子类所共享的特性和行为,表示系统中某些对象的核心概念,子类就用来表示此核心的不同实现方式。
继承现有类型,也就是创造了新的类型。
6.1 有意义的继承是使得父子类之间有差异
那么如何可以达到这一目的呢?
- 直接在子类添加新方法这有时的确是解决问题的简单的完美的方式,但需要仔细考虑这些新方法是不是其实得加到父类中?可描述为is-like-a(像是一个)
- 更重要的是重写父类方法使用相同的 API,但是在新的子类中做一点不寻常的事。这时判断继承关系,可用 is-a(是一个)描述来鉴定。
设计时,仔细审视,经验老道后应该很容易分辨到底采取哪种方式。
看完上面的内容,相信大家已经有了清晰的目标与方向,接下来就是查找学习资料了,我们为大家准备了一套体系化的架构师学习资料包以及BAT面试资料,供大家参考,学习资料包内容及领取方法如下
需要Java架构全套VIP资料教程的 私信我【资料】,免费领取!!
猜你喜欢
- 2024-09-10 感动哭了!《Java 编程思想》最新中文版开源
- 2024-09-10 Java编程思想---对象介绍---参数化类型(泛型)
- 2024-09-10 《JAVA编程思想》5分钟速成:第15章(泛型)
- 2024-09-10 Java基础学习带你了解面向对象的编程思想
- 2024-09-10 Java编程思想——对象介绍——抽象过程
- 2024-09-10 Java编程思想---对象介绍---并发编程
- 2024-09-10 Java编程思想——并发(java并发编程实践和并发编程实战)
- 2024-09-10 Java编程思想:抽象类和方法(java抽象方法是什么)
- 2024-09-10 Java编程思想---万物皆是对象---以引用来操作对象
- 2024-09-10 Java编程思想:我们的第一个 Java 程序
你 发表评论:
欢迎- 最近发表
-
- java8的stream使用小示例(java stream的用法)
- Java 中的 Lambda 表达式深入解析:从语法糖到高阶函数
- 实战解析Android架构设计原则(android的架构)
- 搭建mcp服务器用java17,可是项目开发用的是java8怎么实现?
- Java Stream:集合处理的api(java集合流操作)
- Java 8新特性全面剖析:让编程变得更简单优雅
- Java 8新特性全面解析与最佳实践:掌握未来编程的艺术
- Java 8日期时间API新特性揭秘与深度解析
- Java 8 Stream API 详解(java.stream)
- Java机器学习库(Java ML)(二、聚类)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)