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

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

一、背景介绍


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


二、学习思路


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

相关文章
|
7月前
|
设计模式 监控 算法
【领域驱动设计专题】一文带领你透视DDD领域驱动模型的本质和设计原理分析指南(通用语言体系)
【领域驱动设计专题】一文带领你透视DDD领域驱动模型的本质和设计原理分析指南(通用语言体系)
151 2
|
7月前
|
敏捷开发 监控 架构师
【领域驱动设计专题】一文带领你透视DDD领域驱动模型的本质和设计原理分析指南(构建领域知识)
【领域驱动设计专题】一文带领你透视DDD领域驱动模型的本质和设计原理分析指南(构建领域知识)
196 0
|
6月前
|
程序员 数据安全/隐私保护 C++
C++面向对象的四大特征
C++面向对象的四大特征
48 0
|
7月前
|
存储 安全 关系型数据库
技术人必修课:利用金字塔原理高效思考与表达
作者写这篇文章的目的就是希望能够帮助更多同学了解金字塔原理并合理应用,不只是写作,更是要着眼于思考和表达。本文将围绕认识金字塔结构、表达的逻辑、思考的逻辑、解决问题的框架、演示的逻辑这几个方面带领大家深入学习金字塔原理。
|
7月前
|
存储 数据挖掘
R语言用WinBUGS 软件对学术能力测验建立层次(分层)贝叶斯模型
R语言用WinBUGS 软件对学术能力测验建立层次(分层)贝叶斯模型
|
7月前
|
SQL 机器学习/深度学习 存储
数据库设计革命:逻辑模型的演变与面向对象的突破
数据库设计革命:逻辑模型的演变与面向对象的突破
69 1
|
存储 大数据 OLTP
抽象真实世界的利器
抽象真实世界的利器
|
7月前
|
Java 测试技术 程序员
2024提升计划|优秀程序员的10大共性特征
在设计代码时,很多开发者并没有考虑到"容易测试"这个因素,可测试性不强。如果工程师在开发逻辑的过程中同时考虑如何轻松地进行测试,那么编写出的代码将具备良好的可读性和简单性,并经过精心设计,而不仅仅是"能工作"而已。测试所得到的主要好处发生在考虑测试和编写测试的时候,而不是在运行测试的时候!
|
测试技术 uml
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(三)
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(三)
324 0
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(三)
|
运维 测试技术 uml
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(一)
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(一)
415 0
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(一)