一、背景介绍
经历了三大结构的学习之后,对于事务本质的理解增加了很多的维度;进而开启了面向对象方法的研究。
二、学习思路
1.绘制图
2.查阅资料、并完善图
3.编写代码
4.代码和图对比理解
5.过程中提出问题,用示例和书中的描述来解答问题
三、学习过程
1.整体梳理图
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#程序设计