第一次作业

课程:软件工程原理与方法

要求链接:https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2/homework/2706

课程目标:阅读

一、建立博客介绍自己

  我是2017级计算机越远本科生,一名国旗护卫队队员。来说一下整体的思想导向,到了这个年纪肯定有自己的迷惘。有个人意义危机的追问;怎样理解解释这个世界;关于未来工作的预想不确定和担忧,以至于恐慌;思考何为人,自由意志,形而上学的终极。为了解答自己,看了很多书,喜欢读书喜欢哲学喜欢写字,不敢想从事相关这些方面的工作。专业方面还可以,大一开始由于自学的多打的底子还可以,现在在学习Python,并打算精通它。

二、阅读与思考

  (1)回想大一时对专业的畅想

    报考专业时,计算机软件什么的是热门,就业率高工资高尽管累,你不能要求我要追求理想去学哲学,因为我们中华子民受道教入世思想影响而来的实用主义让我考虑现实,就算除去这方面,我还有努力生存挣脱较低的阶级的欲望。但是我还是对这方面蛮有兴趣的,打小儿就喜欢数学,觉得黑客(此指最原始的黑客)很帅,颇有侠风。

    符合期待,因为编程。

    蛮喜欢,也蛮擅长。

    去天津或北京,公司期待华为。

  (2)现在的你

    只知道基础编程,一点儿算法。我觉得缺乏实践。

  (3)选择的十字路口

    考研。考试能力强,学习能力强,数学优势。大三全力备考,这暑假做准备工作。

三、提有质量的问题

  (1)第一章  概论  1.2.3中有一个提问也是我自己想问的——“以后的‘人工智能’会自己写程序吗?”

    人工智能具有解决软件开发中的一个古老问题的潜力。代码编写或操纵其他代码的能力的概念已经存在了很长时间,一般称为元编程(它实际上起源于20世纪50年代末的Lisp)。它解决的难题,目前都还在人们的想象之中。

    但是,现在人工智能让改变发生了。

    使用人工智能,计算机能够理解一个软件开发项目从无到有的发展历史过程中的所有代码,并立即改进或者删除单独一行代码中的bug,不管是用什么编程语言。即便是一个缺乏经验的或者中等水平的程序员都能讲清楚让计算机自我编程的原理。由此,                一个癌症项目的研究可能几天或者几个月就能完成,而不需要花费好几年的时间,这将带来显著的进步。今天,这项最终将会带来颠覆性改变的技术尚处在萌芽时期,但是,它已经开始生长。比如,谷歌的TensorFlow机器学习软件,让每位程序员都能将                神经网络直接融入到所开发的APP中,让APP拥有识别图片中的人和物体的能力。要把这些想法变成现实,你将不再需要一个博士学位。让业余人士也可以修正程序,这可能会成为AI发展历史上最大的突破。

  (2)本书多次出现“可维护性”,究竟什么怎么实现维护?

  可维护性是指当需要修改程序的某个模块时,对其他模块的影响和修改的代价

  代码风格:

    1.     命名规范

    命名要能传递出变量或者方法的含义,少用缩写

    私有成员以m开头,静态成员以s开头,常量用大写字母等

    2.     代码排版

    留出合理的空白空间来区分不同的代码块

    同类的变量的声明要放在一组,不同类变量之间留出一行空白等

    3.     关键注释

    仅为关键的代码添加注释

  代码的层次性:

    对于一段业务逻辑,不要试图在一个方法或者一个类中去全部实现,而要将它分成几个子逻辑,然后让每个子逻辑做自己的事情;当代码的层次性出来以后,就可以做到单一职责了

  面向拓展编程:

    在写程序的过程中要时刻考虑到扩展

  设计模式:

    恰当地使用设计模式可以提高代码的可维护性和可扩展性

  (3)“什么是好的程序设计思想?”(第三章,p45)

    

面向对象编程四大特性

 

抽象:对有共性的事物中待关注的部分加以抽象成接口或类。包括过程抽象和数据抽象

封装:将具有共性的一类事物的共性部分抽象出来形成一系列封闭的、自治的数据与过程,通过private、protected、public来决定对外开放的级别。封装要做到低耦合高内聚。

 

继承:当具有某些共性时,一个新类可以通过继承另一个已实现的类的方法、数据并加以扩展实现

多态:不同子类对象实现父类的抽象方法的行为可以不一样 (注意与重载的区别)

 

 

面向对象编程6大原则

 

单一职责原则:一个类最好只实现一个粒度足够小的功能,该功能不能再被细分。防止类中出现两个功能相互影响等情况。

里氏替换原则:子类的实现不影响父类已有的非抽象方法调用,只扩展不修改。防止因子类重载或重写父类方法造成调用混淆、功能紊乱等的情况。

依赖倒置原则:高层级的类尽量不要直接对低层级的类产生依赖,而是尽量面向接口编程,通过接口(也可以是方法或委托)传递依赖关系,防止出现低层级的类修改导致原有的高层级调用关系失效的情况。

接口隔离原则:接口实现的功能粒度应最小化,即多个功能应分成多个独立的接口(原则上如此,实际编码可适当酌情设计,把握度),防止类在实现接口时需要实现该类不必要的功能,造成代码复杂度增加

迪米特法则:对象的行为实现要保持对其他对象尽量少的了解,即对象的实现尽量避免对其他的类的依赖,做到高内聚低耦合。 例如A的实现与B和C产生了关联,而B和C属于聚合关系,A的实现可以只和B关联,则就没必要使A和B产生直接的关联。所以一个类应尽量少的依赖其他类,同时也要尽量少的让其他类对你产生依赖。防止修改类时出现藕断丝连的情况

开闭原则:对扩展开放,对修改关闭。即要求用抽象构建框架,用实现扩展细节(http://blog.csdn.net/zhengzhb/article/details/7296944);专门函行为要单一功能,通用行为要抽象。防止后期需求变更引起的代码修改量大

 

面向对象编程的23种特性

 

 

附:

多态与重载的区别:http://blog.csdn.net/weigb/article/details/1864192 多态是对虚方法的重写,编译时无法确定方法调用情况。重载允许一个类中有重名的方法,方法中参数不同。
---------------------
作者:shuizhizhiyin
来源:CSDN
原文:https://blog.csdn.net/shuizhizhiyin/article/details/51718900
版权声明:本文为博主原创文章,转载请附上博文链接!

  (4)、“同时编译Debug|Retail版本”(第四章,p74)

    DEBUG是一种计算机程序。马克2号(Harvard Mark II)编制程序的葛丽丝·霍波(Grace Hopper)是一位美国海军准将及计算机科学家,同时也是世界最早的一批程序设计师之一。有一天,她在调试设备时出现故障,拆开继电器后,发现有只飞蛾被夹扁在触点中间,从而"卡"住了机器的运行。于是,霍波诙谐的把程序故障统称为"臭虫(BUG)",把排除程序故障叫DEBUG,而这奇怪的"称呼",竟成为后来计算机领域的专业行话。如DOS系统中的调试程序,程序名称就叫DEBUG。DEBUG在windows系统中也是极其重要的编译操作。

  (5)“线程安全”(第四章)

  

如果你的代码所在的进程中有多个线程同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。
线程安全问题都是由全局变量静态变量引起的。
若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则就可能影响线程安全。
 

 

四、了解和调查源程序版本管理工具  

1.Microsoft TFS:

优点:任务版上能将需求、项目进度一览无余,对于小团队而言,比甘特图更有用,集成了项目管理、版本控制、BUG 跟踪,能有效实现 SCRUM,能与 VS 无缝接合。

缺点:搭建、维护tfs比较复杂,硬件要求也比较高。

2.GitHub:

优点:GitHub是一个非常万能的工具。对于任何大小的项目,他都是理想的工具;他也是伟大的web工作流工具。首先,他可以作为一个版本控制系统和协作工具,用它来发布工作。

        利用GitHub,你可以将项目存档,与其他人分享交流,并让其他开发者帮助你一起完成这个项目。优点在于 ,他支持多人共同完成一个项目,因此你们可以在同一页面对话交流。

        创建自己的项目,并备份,代码不需要保存在本地或者服务器,GitHub做得非常理想。

        学习Git也有很多好处。他被视为一个预先维护过程,你可以按自己的需要恢复、提交出现问题,或者您需要 恢复任何形式的代码,可以避免很多麻烦。Git最好的特性之一是能够跟踪错误,这让使用Github变得更加简 单。Bugs可以公开,你可以通过Github评论,提交错误。在GitHub页面,你可以直接开始,而不需要设置主机或者DNS。

缺点:如果,你是Github使用新手,首先的挑战就是摆正心态——需要不断实践和时间。他可能不是捕捉创意过程和记录创意点子的最佳工具。对于这种特殊功能模拟可以选择LayerVault 或其他相 似工具。

         之前,我们已经强调过Github非常适用代码跟踪,但是却不是最好的设计跟踪工具。将图片内容转 化为代码,或者将设计用于产品设置,看起来依旧不是那样顺利。这是由设计者决定的,然而,一些人发现 GUI 有点混乱,选择CLI代替。一些开发人员学习主要使用Git命令 ,这样可以解释为什么他们不太喜欢GUI的原因了。

         稍加练习,命令的学习是不太困难的。然而,你喜欢天天 写命令吗?特别是跟踪项目历史或解决冲突的时候。所以就有了另外一群喜欢GUI的人们。将提交、修改、移 动文件等操作可视化,会有一个更好的体验。而这些,就如之前提到的,需要时间来适应。

         如果,你专门在GIthub上工作,版本控制存储库就值得你拥有,也需要你长期付出。

3.Trac:

优点:Trac做一个SCM配置管理平台,意味着它有良好的扩充性

        Trac的权限体系是比较完备的设计

        非常灵活,可以随心所欲的定制,可以和TortoiseSVN集成。

缺点:不支持多项目,

        需求和缺陷没有分离,

        用 wiki 来替代 Word 等工具编写文档对于产品策划来说门槛太高了,

        中文化不完整,美术人员接触起来困难重重,

        不显示中文名,本地化做得很差,

        核心功能很少,不安装插件基本上没法用。

 

posted @ 2019-03-19 17:25  brighthammer  阅读(188)  评论(0编辑  收藏  举报