面向对象四大特征-系统学习二

简介: 经历了三大结构的学习之后,对于事务本质的理解增加了很多的维度;进而开启了面向对象方法的研究。

一、背景介绍


经历了三大结构的学习之后,对于事务本质的理解增加了很多的维度;进而开启了面向对象方法的研究。


二、学习思路


1.绘制图

2.查阅资料、并完善图

3.编写代码

4.代码和图对比理解

5.过程中提出问题,用示例和书中的描述来解答问题


三、学习过程


1.整体梳理图


2021042614184254.png


2.代码(如下代码只是对于抽象封装的理解;继承、多态读者可自行实践感受)


package com.a4features;
import javax.swing.*;
import java.util.Scanner;
/**
 * 功能描述:面向对象抽象、封装的理解
 *
 * N+1过程的理解:改变事物中某一个原子粒度的量来对比其变化
 * 细小的改变却带来了举足轻重的意义
 *
 * @Author:makang
 * @Date: 2021/4/25 17:23
 */
public class testMainOperation {
    public static void main(String[] args) {
        //计算5和6的和
        //开始主题讨论:《从1.1 《版本1:计算5和6的和》中,这样极其简单的代码,你写的多吗?从中你又能发现什么?》
        test1();
        System.out.println();
        //简单的变化开始
        //主题讨论:《从版本1到版本2中代码发生了非常巨大的变化,来说说你发现的巨大变化都有哪些,以及你能由此想到的更深入的知识点还有哪些?》
        test2();
        System.out.println();
        //质的变化
        //《看到版本3之后,你想提什么样的问题?》
        test3();
        System.out.println();
        //变是永远不变的
        //《结合版本4的伪代码示例,对于版本4的命名:变是永远不变的,请你用不少于300字,来深入的探讨并描述一下你的感受》
        test4();
        System.out.println();
        //多此一举吗?
        //主题讨论:《看了版本5和版本4的代码示例,请用不少于200字,来描述一下它们之间这个巨大的变化》
        test5();
        System.out.println();
        //用户的需求又来了
        //《基于版本5的代码示例,用户又提出了新的需求(如版本6的代码示例),你帮忙想想,如何应对用户这种需求变化》
        test6();
        System.out.println();
        //用户的需求又又来了
        //《看了版本7的代码示例之后,发现程序员小哥硕果仅存的头发又少了,面对用户源源不断的需求变化,你作为一名高级软件工程师,该如何拯救这些代码?》
        test7();
    }
    public static void test1(){
        System.out.println(5+6);
    }
    public static void test2(){
        int a,b;
        a=5;
        b=6;
        //相对于test1将值的部分从下面的输出做了抽取,封装到了变量中
        System.out.println(a+b);
    }
    public static void test3() {
        int a,b,c;
        a=5;
        b=6;
        c = a+b;
        //相对于test2将计算逻辑进行了抽取,使得后续计算逻辑的改变不再影响下面的输出
        System.out.println(c);
    }
    public static void test4(){
        int a,b,c;
        a = 0;
        b = 0;
        //相对于test3,将a和b的值做成了控制台输入的方式,使得a和b的改变不再需要动代码,变得随心所欲
        System.out.println("test4请输入a和b的值:");
        Scanner scanner = new Scanner(System.in);
        int index = 1;
        while (true){
            String naxtLine = scanner.nextLine();
            if(index ==1) {
                a = Integer.valueOf(naxtLine);
            }else if(index ==2){
                b = Integer.valueOf(naxtLine);
            }
            index ++;
            if(index == 3){
                break;
            }
        }
        c=a+b;
        System.out.println("a+b的值为:"+c);
    }
    public static void test5(){
        int a,b,c;
        a = 0;
        b = 0;
        System.out.println("test5请输入a和b的值:");
        Scanner scanner = new Scanner(System.in);
        int index = 1;
        while (true){
            String naxtLine = scanner.nextLine();
            if(index ==1) {
                a = Integer.valueOf(naxtLine);
            }else if(index ==2){
                b = Integer.valueOf(naxtLine);
            }
            index ++;
            if(index == 3){
                break;
            }
        }
        c=a+b;
        //相对于test4把值的输出封装到了弹出框中,使得输出变得更加灵活
        JOptionPane.showMessageDialog(new JLabel(),c,"a+b的值为:",2);
    }
    public static void test6(){
        int a,b,c,d;
        a = 0;
        b = 0;
        System.out.println("test6请输入a和b的值:");
        Scanner scanner = new Scanner(System.in);
        int index = 1;
        while (true){
            String naxtLine = scanner.nextLine();
            if(index ==1) {
                a = Integer.valueOf(naxtLine);
            }else if(index ==2){
                b = Integer.valueOf(naxtLine);
            }
            index ++;
            if(index == 3){
                break;
            }
        }
        //这个d的值为数据库中取出的结果如何?
        d = 222;
        c=a+b+d;
        JOptionPane.showMessageDialog(new JLabel(),c,"a+b+d的值为:",2);
    }
    public static void test7(){
        int a,b,c,d,e;
        a = 0;
        b = 0;
        System.out.println("test7请输入a和b的值:");
        Scanner scanner = new Scanner(System.in);
        int index = 1;
        while (true){
            String naxtLine = scanner.nextLine();
            if(index ==1) {
                a = Integer.valueOf(naxtLine);
            }else if(index ==2){
                b = Integer.valueOf(naxtLine);
            }
            index ++;
            if(index == 3){
                break;
            }
        }
        //这个d的值为数据库中取出的结果如何?
        d = 222;
        //这个e为从配置文件中获取的结果如何?
        e = 555;
        c=a+b+d-e;
        JOptionPane.showMessageDialog(new JLabel(),c,"a+b+d-e的值为:",2);
    }
}


四、学习总结


1.对于面向对象特性的理解从原子的角度去剖析从而发现它举足轻重的意义

2.N+1过程的理解:改变事物中某一个原子粒度的量来对比其变化


五、升华


多维度、场景化的来学习和理解,静静品味人类时间长河中智慧的产物


参考资料:大话设计模式、java软件设计基础、架构整洁之道、c#程序设计

相关文章
|
存储 Java
Java中的基本数据类型有哪些?它们的大小和取值范围是多少?
Java基础数据类型:4种整型(byte[-128,127],short[-32,768,32,767]),2种浮点(float,double),1种字符(char,Unicode),1种布尔(true,false)。
574 0
|
XML JavaScript 数据格式
DOM中的节点分为哪几种几类型
DOM中的节点分为哪几种几类型
44 0
|
机器学习/深度学习 人工智能
IBM推出创新框架用“黑盒”方式,评估大模型的输出
【7月更文挑战第17天】IBM研发的创新框架以“黑盒”方法评估大模型输出的可信度,通过观察输入和输出,不涉及模型内部。采用逻辑回归模型,基于四个特征(输出长度、多样性、一致性和新颖性)来估计可信度。在多个数据集上测试,显示优于其他“黑盒”方法,且具有可解释性。但仅适用于可访问的模型,可能忽略内部细节,不适用于所有场景。[[arXiv:2406.04370](https://arxiv.org/abs/2406.04370)]
254 4
|
设计模式 运维 分布式计算
工作经验小结(2023.11.21)
工作经验小结(2023.11.21)
302 1
|
数据采集 存储 NoSQL
Redis 与 Scrapy:无缝集成的分布式爬虫技术
Redis 与 Scrapy:无缝集成的分布式爬虫技术
|
开发者
氚云丨开发课— 06 Timer 定时器的常见使用| 学习笔记
快速学习氚云丨开发课— 06 Timer 定时器的常见使用。
|
前端开发 应用服务中间件 nginx
Docker安装nginx和基本配置
Docker安装nginx和基本配置
629 0
|
存储 负载均衡 监控
epoll服务器百万并发测试
epoll服务器百万并发测试
239 1
EMQ
|
传感器 算法 网络协议
MQTT 客户端自动重连最佳实践|构建可靠 IoT 设备连接
本文介绍在MQTT客户端代码实现过程中,自动重连逻辑设计的重要性与示例,帮助读者设计更为合理的重连代码,构建更加稳定可靠的物联网设备连接。
EMQ
1607 0
MQTT 客户端自动重连最佳实践|构建可靠 IoT 设备连接