課程:軟件工程原理與方法html
要求連接:https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2/homework/2706程序員
課程目標:閱讀web
1、創建博客介紹本身算法
我是2017級計算機越遠本科生,一名國旗護衛隊隊員。來講一下總體的思想導向,到了這個年紀確定有本身的迷惘。有我的意義危機的追問;怎樣理解解釋這個世界;關於將來工做的預想不肯定和擔心,以致於恐慌;思考何爲人,自由意志,形而上學的終極。爲了解答本身,看了不少書,喜歡讀書喜歡哲學喜歡寫字,不敢想從事相關這些方面的工做。專業方面還能夠,大一開始因爲自學的多打的底子還能夠,如今在學習Python,並打算精通它。編程
2、閱讀與思考windows
(1)回想大一時對專業的暢想設計模式
報考專業時,計算機軟件什麼的是熱門,就業率高工資高儘管累,你不能要求我要追求理想去學哲學,由於咱們中華子民受道教入世思想影響而來的實用主義讓我考慮現實,就算除去這方面,我還有努力生存掙脫較低的階級的慾望。可是我仍是對這方面蠻有興趣的,打小兒就喜歡數學,以爲黑客(此指最原始的黑客)很帥,很有俠風。安全
符合期待,由於編程。服務器
蠻喜歡,也蠻擅長。網絡
去天津或北京,公司期待華爲。
(2)如今的你
只知道基礎編程,一點兒算法。我以爲缺少實踐。
(3)選擇的十字路口
考研。考試能力強,學習能力強,數學優點。大三全力備考,這暑假作準備工做。
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)「線程安全」(第四章)
4、瞭解和調查源程序版本管理工具
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 等工具編寫文檔對於產品策劃來講門檻過高了,
中文化不完整,美術人員接觸起來困難重重,
不顯示中文名,本地化作得不好,
核心功能不多,不安裝插件基本上無法用。