《Java面向对象程序设计》学习笔记——第 7 章 面向对象设计的基本原则

​专栏:《Java面向对象程序设计》学习笔记

​# 第 7 章 面向对象设计的基本原则

7.1 UML 类图简介

类的 UML 图

长方形垂直地分为三层。

  • 第 1 层是名字层。

    名字是常规字形,表明该类是具体类,如果类的名字是斜体字形,表明该类是抽象类

  • 第 2 层是变量层。

  • 第 3 层是方法层。

    访问权限:+表示 public -表示 private #表示 protected

  • 接口 (lnterface)

  • 泛化关系 (Generalizationl)

    继承关系 实线 空心三角形

  • 关联关系 (Association)

    组合关系 实线 箭头

  • 依赖关系 (Dependency)

    弱组合关系 虚线 箭头

  • 实现关系 (ReaIization)

    实现接口 虚线 空心三角形

7.2 面向抽象原则

所谓面向抽象编程,是指当设计一个类时,不让该类面向具体的类,而是面向抽象类或接口,即所设计类中的重要数据是抽象类或接口声明的变量,而不是具体类声明的变量。

“面向抽象编程”,该原则的核心就是将类中经常需要变化的部分分割出来。其关键点是分割变化。

  • 将每种可能的变化对应地交给抽象类的一个子类或实现接囗的一个类去负责

  • 从而让类的设计者不去关心具体实现,避免所设计的类依赖于具体的实现。

  • 基于该原则就容易使设计的类应对用户需求的变化。

7.3 “开-闭”原则

“开.闭”原则 (Open-Closed Principle) ,就是让用户的设计“对扩展开放,对修改关闭”。

本质是指当在一个设计中增加新的模块时,不需要修改现有的模块。

7.4 “多用组合、少用继承”原则

继承与复用

  • 子类从父类继承的方法在编译时刻就确定下来了,所以无法在运行期间改变从父类继承的方注的行为。

  • 子类和父类的关系是强耦合关系,也就是说当父类的方法的行为更改时,必然导致子类发生变化

  • 通过继承进行复用也称“白盒”复用,其缺点是父类的内部细节对于子类而言是可见的。

组合与复用

如果一个对象 a 组合了对象 b ,那么对象 a 就可以委托对象 b 调用其方法

  • 通过组合对象来复用方法也称“黑盒”复用,因为当前对象只能委托所包含的对象调用其方法,这样一来,当前对象所包含的对象的方注的细节对当前对象是不可见的。
  • 对象与所包含的对象属于弱耦合关系,因为,如果修改当前对所包含的对象的类的代码,不必修改当前对象的类的代码。
  • 当前对象可以在运行时刻动态指定所包含的对象

7.5 “高内聚-低耦合”原则

如果类中的方法是一组相关的行为,则称该类是高内聚的,反之称为低内聚的。

高内聚便于类的维护,而低内聚不利于类的维护。

低耦合就是尽量不盅让一个类含有太多的其它类的实例的引用,以避免修改系统的其中一部分会影响到其它部分,

7.6 小结

  1. 在设计模式中,使用简单的 UML 类图可以简洁地表达一个模式中类之间的关系。
  2. 面向抽象原则的核心思想是:在设计一个类时,不让该类面向具体的类,而是面向抽象类或接口,即所设计类中的重要数据是抽象类或接口声明的变量,而不是具体类声明的变量。
  3. “开-闭”原则的本质是指当一个设计中增加新的模块时,不需要修改现有的模块。我们在给出一个设计时,应当首先考虑到用户需求的变化,将应对用户变化的部分设计为对扩展开放,而设计的核心部分是经过精心考虑之后确定下来的基本结构,这部分应当是对修改关闭的,即不能因为用户的需求变化而再发生变化,因为这部分不是用来应对需求变化的。
  4. “多用组合、少用继承”原则的目的是减少类之间的强耦合关系。
  5. “高内聚-低耦合”原则的目的是尽量不要让一个类含有太多的其他类的实例的引用,便于类的维护。

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

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

相关文章

C语言可变数组 嵌套的可变数组,翻过了山跨过了河 又掉进了坑

可变数组 ​专栏内容: postgresql内核源码分析 手写数据库toadb 并发编程 个人主页:我的主页 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 概述 数组中元素是顺序存放,这一特性让我们…

【IC萌新虚拟项目】spt_core模块基于dc的综合环境搭建与面积时序优化

关于整个虚拟项目,请参考: 【IC萌新虚拟项目】Package Process Unit项目全流程目录_尼德兰的喵的博客-CSDN博客 前言 当验证的同学正在疯狂写测试点,补充测试用例各种找茬找bug时候,设计的同学也要进入到跑综合修时序优化面积的阶段了。 还是老样子,关于芯片综合的知识就…

Redis_缓存3_缓存异常(数据不一致、雪崩、击穿、穿透)

14.6缓存异常 四个方面 缓存中数据和数据库不一致缓存雪崩缓存击穿缓存穿透 14.6.1数据不一致: 一致性包括两种情况 缓存中有数据,需要和数据库值相同缓存中没有数据,数据库中的数据是最新值 如果不符合以上两种情况,则出现…

Linux tee

tee 是一个命令行工具,它可以从标准输入读取数据,并将其同时输出到标准输出和指定的文件中。tee 命令非常实用,特别是在需要同时查看输出内容和将其保存到文件中的情况下。 tee 命令的基本语法如下: command | tee [options] [f…

Mysql 搭建MHA高可用架构,实现自动failover,完成主从切换

目录 自动failover MHA: MHA 服务 项目:搭建Mysql主从复制、MHA高可用架构 实验项目IP地址配置: MHA下载地址 项目步骤: 一、修改主机名 二、编写一键安装mha node脚本和一键安装mha mangaer脚本,并执行安装 …

docker容器限定ip访问

docker容器限定ip访问 一、测试所需环境:二、使用docker的 iptables 策略三、Docker使用iptables 与系统Firewalld之间的关系四、冲突解决方案 一、测试所需环境: 主机1: ip:192.168.3.117 环境配置:docker、httpd(do…

你真的了解ORM吗?通过一个简单的例子来学习ORM

什么是ORM ORM(Object-Relational Mapping)是一种将面向对象程序数据模型与关系数据库之间进行映射的技术。 比如数据库表user,它有id、name、age字段映射到Java实体类就是User类,有id、name、age属性。 CREATE TABLE user (id…

2023国赛 高教社杯数学建模ABCDE题思路汇总分析

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 全国大学生数学建模…

echarts加钓鱼岛赤尾屿(vue)(亲测有效)

1.首先引入json文件,node_modules/echarts中就有 import chinaData from "../../node_modules/echarts/map/json/china.json" 2.初始化地图,在初始化地图的时候加入钓鱼岛和赤尾屿的数据,在chinaData下的features中加入即可&#x…

Design-Pattern设计模式

Design-Pattern设计模式 图说设计模式 图说设计模式 在线书籍 软件模式是将模式的一般概念应用于软件开发领域,即软件开发的 总体指导思路或参照样板。软件模式并非仅限于设计模式,还包括 架构模式、分析模式和过程模式等,实际上&#xff…

FFmpeg常见命令行(四):FFmpeg流媒体

前言 在Android音视频开发中,网上知识点过于零碎,自学起来难度非常大,不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》,结合我自己的工作学习经历,我准备写一个音视频系列blog。本文是音视频系…

leetcode做题笔记77组合

给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 思路一:直接求出组合数将每个组合放进数组中 int** combine(int n, int k, int* returnSize, int** returnColumnSizes) {int size 0, num 1, i;in…

Rust中的智能指针:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak<T>

Rust中的智能指针是什么 智能指针(smart pointers)是一类数据结构,是拥有数据所有权和额外功能的指针。是指针的进一步发展 指针(pointer)是一个包含内存地址的变量的通用概念。这个地址引用,或 ” 指向”…

UML 类图的画法

1.类图的画法 类 整体是个矩形,第一层类名,第二层属性,第三层方法。 :public- : private# : protected空格: 默认的default 对应的类写法。 public class Student {public String name;public Integer age;protected I…

2023杭电第七场补题报告1002 1004 1011 1013

2023杭电第七场补题报告1002 1004 1011 1013 1002 B. Random Nim Game (hdu.edu.cn) 思路 手推一下就可以发现其实除了一次必定结束的其他情况概论都是 1 2 \frac{1}{2} 21​ 代码 #include <bits/stdc.h> using namespace std; #define int long long void solve()…

【hello C++】特殊类设计

目录 一、设计一个类&#xff0c;不能被拷贝 二、设计一个类&#xff0c;只能在堆上创建对象 三、设计一个类&#xff0c;只能在栈上创建对象 四、请设计一个类&#xff0c;不能被继承 五、请设计一个类&#xff0c;只能创建一个对象(单例模式) C&#x1f337; 一、设计一个类&…

Sentinel使用实例

不说了&#xff0c;直接上官方文档 https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/readme-zh.md Sentinel Example 项目说明 本项目演示如何使用 Sentinel starter 完成 Spring Clo…

【金融量化】对企业进行估值的方法有哪些?

估值的方法有哪些&#xff1f; 如何对企业进行估值&#xff1f;有2个方法估算。 1 绝对估值法 它是一种定价模型&#xff0c;用于计算企业的内在价值。 比如说你可以根据公司近N年的现金流情况。借此去预测未来N年的现金流情况。所有的现金流数据都可以在年报上查询到。最后…

ios 知识

IOS 类文件.h和.m中interface的区别 大家都知道我们在创建类文件时会发现&#xff1a; #import <UIKit/UIKit.h>interface ViewController : UIViewControllerend和 #import "ViewController.h"interface ViewController ()end那么他们之间有何区别呢&#x…

【Ajax】回调地狱解决方法

回调地狱&#xff08;Callback Hell&#xff09;是指在异步编程中&#xff0c;特别是在嵌套的回调函数中&#xff0c;代码变得深度嵌套、难以阅读和维护的现象。这通常发生在处理多个异步操作时&#xff0c;每个操作都依赖于前一个操作的结果。回调地狱使代码变得难以理解、扩展…