|
|
教学公告
一、教学安排
自学第2章的内容 24-47页
讲授第3-4章的内容48-66页
实验作业(双周才布置)在学者网课程平台:
http://www.scholat.com/course/rjgz
二、重点难点
1、设计模式的起源、定义、以及作用
2、理解软件构造与设计模式的关系
3、理解创建型模式
4、简单工厂模式的结构和分析
三、课前思考
小明到A公司进行笔试,题目如下:
请用C++、Java、Python或C#任意一种面向对象语言实现一个计算器控制台程序,要求输入两个数和运算符,得到结果。
四、师说
总有人疑惑:优秀的技术架构和平庸的,区别在哪里?确实,从开发到上线,似乎没什么区别,都能跑业务。但优秀的技术架构,可以让后续的运营,维护变得更简单,更便捷。
我们平时说的扩展性更好,包括两个层面:一是用户量、访问频次、数据规模增加后的扩展性;二是新的业务诉求和运营诉求的扩展性。理解这一点,就能明白:为什么优秀的技术研发能力,可以让企业发挥更大的价值。
回归技术,其实就是强调无数次的高复用、低耦合。有人说,这不是架构师的范畴么。架构师的确需要这样的概念和设计准则,但普通的研发工程师,难道就不需要了么?很多程序员都卡在了这个环节上,代码的可维护性、扩展性差。说起来,老板要的功能也都实现了,但只要稍微提出点新诉求,或面对一些更复杂的场景,就牵一发而动全身,到处都得修补删改。
重构,重构,还是重构,想想就崩溃。设计能力上不去,重构也仅仅能解决新诉求、新场景的问题,这样的重构,能坚持多久?而这些,就是设计模式要解决的问题。
如果你写了多年代码,编程功力却长进不大,面临稍复杂的代码设计和开发,写出的代码不仅杂乱,扩展性也很差。那你真该好好想一想,自己的认知和知识体系中,是否缺乏了设计模式这个环节。
要知道,代码光“够用”是远远不够的,还要“好用”。如果说数据结构和算法是教你如何写出高效的代码,那设计模式讲的就是如何写出可扩展、可读、可维护的高质量代码。算法 + 设计模式,奠定了一个工程师最基本的代码能力。
所以,设计模式与编码密切相关,能直接提高你的开发能力,是实打实的硬核技能。而且,设计模式更是大厂面试中的高频问题,大厂更加重视候选人的基本功,毕竟你代码写的好,后续的运营维护才会更简单、更敏捷。
从上面可知,设计模式是软件工程师的必备技能之一,在各种面试宝典里面是经常看到的,这意味着公司在面试过程(特别是编程面试)中会有非常大的几率碰到相关的题目。实际上,编程能力和设计技巧是对彼此很好的补充。一个好的程序员通常都是一个好的软件设计人员。他们知道怎么把一个问题分割成一段段代码或者软件设计,但这些能力和技巧并不能凭空而来。本学期课程的核心内容就是掌握熟悉GoF 23种设计模式,让大家从另外一个维度去理解面向对象设计的6大原则。
这23种设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性,以及类的关联关系和组合关系的充分理解。当然,软件设计模式只是一个引导,在实际的软件开发中,必须根据具体的需求来选择。个人觉得,通俗地说,有3点是大家需要理解的:
1、设计模式是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。
2、对于简单的程序,可能写一个简单的算法要比引入某种设计模式更加容易。但是对于大型项目开发或者框架设计,用设计模式来组织代码显然更好。
3、本学期讲解的软件设计模式,用Java语言为例进行讲解,但是设计模式并不是 Java 的专利,它同样适用于 C++、Python、C#、Javascript 等其它面向对象的编程语言。
五、阅读材料
23种设计模式-6大原则
https://www.cnblogs.com/welan/p/9005019.html
如何给女朋友解释什么是面向对象编程?
https://baijiahao.baidu.com/s?id=1626333751993181194&wfr=spider&for=pc