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

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

一、背景介绍


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


二、学习思路


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#程序设计

相关文章
|
2月前
|
设计模式 监控 算法
【领域驱动设计专题】一文带领你透视DDD领域驱动模型的本质和设计原理分析指南(通用语言体系)
【领域驱动设计专题】一文带领你透视DDD领域驱动模型的本质和设计原理分析指南(通用语言体系)
81 2
|
5天前
|
存储 安全 区块链
元宇宙与区块链技术的关系可以从多个角度进行阐述。以下是对这两者之间关系的详细分析
**元宇宙:虚拟世界融合现实元素,强调交互与沉浸;区块链:去中心化、安全的分布式账本。两者结合,区块链确保元宇宙中虚拟资产安全、支付高效、身份验证私密、治理透明,支撑其经济体系与用户信任,驱动未来发展。**
|
25天前
|
程序员 数据安全/隐私保护 C++
C++面向对象的四大特征
C++面向对象的四大特征
10 0
|
2月前
|
SQL 机器学习/深度学习 存储
数据库设计革命:逻辑模型的演变与面向对象的突破
数据库设计革命:逻辑模型的演变与面向对象的突破
27 1
|
11月前
|
存储 大数据 OLTP
抽象真实世界的利器
抽象真实世界的利器
【C++综合设计题】多层继承和抽象基类的综合应用
【C++综合设计题】多层继承和抽象基类的综合应用
|
测试技术 uml
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(三)
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(三)
282 0
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(三)
|
运维 测试技术 uml
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(一)
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(一)
353 0
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(一)
|
测试技术 uml 数据安全/隐私保护
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(二)
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(二)
264 0
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(二)
|
敏捷开发 测试技术 uml
软件方法:业务建模和需求札记-建模和UML
软件方法:业务建模和需求札记-建模和UML
186 0