日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

哈工大软件构造课程知识点总结(二)

發(fā)布時(shí)間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 哈工大软件构造课程知识点总结(二) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

系列文章目錄

哈工大軟件構(gòu)造課程知識(shí)點(diǎn)總結(jié)(一)
哈工大軟件構(gòu)造課程知識(shí)點(diǎn)總結(jié)(二)
哈工大軟件構(gòu)造課程知識(shí)點(diǎn)總結(jié)(三)
哈工大軟件構(gòu)造課程知識(shí)點(diǎn)總結(jié)(四)
哈工大軟件構(gòu)造課程知識(shí)點(diǎn)總結(jié)(五)
哈工大軟件構(gòu)造課程知識(shí)點(diǎn)總結(jié)(六)


文章目錄

  • 系列文章目錄
  • 簡(jiǎn)介
  • Chapter 3:Software Construction Process and Configuration Management
    • 軟件開(kāi)發(fā)的生命周期
    • 傳統(tǒng)軟件開(kāi)發(fā)的過(guò)程模型
      • 瀑布過(guò)程
      • 增量過(guò)程
      • V字模型
      • 原型過(guò)程
      • 螺旋模型
    • 敏捷開(kāi)發(fā)
    • 軟件配置管理與版本控制系統(tǒng)
      • Git——一種分布式版本控制工具
    • 軟件構(gòu)造整體過(guò)程
    • 軟件構(gòu)造的狹義過(guò)程——Build
  • Chapter 4:Data Type and Type Checking
    • 編程語(yǔ)言中的數(shù)據(jù)類(lèi)型
    • 靜態(tài) / 動(dòng)態(tài)類(lèi)型檢查
      • 靜態(tài) / 動(dòng)態(tài)檢查
    • 不可變性(inmutability) 與可變性(mutablity)
      • 不可變類(lèi)型示例——`String`
      • 可變類(lèi)型示例——`StringBuilder`
    • 快照?qǐng)D(Snapshot Diagram)
      • 基本類(lèi)型的畫(huà)法
      • 對(duì)象類(lèi)型的畫(huà)法
    • 復(fù)雜數(shù)據(jù)結(jié)構(gòu)
    • 一些有用的不可變類(lèi)型


簡(jiǎn)介

此文章是2021春哈工大軟件構(gòu)造課程Chapter 3、Chapter 4的知識(shí)點(diǎn)總結(jié)。

Chapter 3:Software Construction Process and Configuration Management

軟件開(kāi)發(fā)的生命周期


From 0 to 1 從無(wú)到有
From 1 to n 從有到好

傳統(tǒng)軟件開(kāi)發(fā)的過(guò)程模型

兩個(gè)基本類(lèi)型:線性過(guò)程(Linear)、迭代過(guò)程(Iterative)

現(xiàn)有模型:

  • 瀑布過(guò)程(Waterfall)
  • 增量過(guò)程(Incremental)
  • V字模型(V-Model)
  • 原型過(guò)程(Prototyping)
  • 螺旋模型(Spiral)
  • 選擇合適的過(guò)程模型的依據(jù):

    • 用戶(hù)參與度(適應(yīng)變化的能力)
    • 開(kāi)發(fā)效率(管理復(fù)雜度)
    • 開(kāi)發(fā)出的軟件的質(zhì)量

    瀑布過(guò)程

    特點(diǎn):

    • 線性無(wú)迭代,整體推進(jìn)
    • 階段劃分清楚
    • 管理簡(jiǎn)單
    • 無(wú)法適應(yīng)需求變化

    增量過(guò)程

    特點(diǎn):

    • 增量式(多個(gè)瀑布串行)線性推進(jìn)
    • 無(wú)迭代
    • 比較容易適應(yīng)需求的增加

    V字模型

    特點(diǎn):

    • 瀑布過(guò)程的拓展
    • 結(jié)合測(cè)試

    原型過(guò)程

    迭代過(guò)程,開(kāi)發(fā)之后由用戶(hù)試用、評(píng)審,發(fā)現(xiàn)問(wèn)題反饋給開(kāi)發(fā)者,開(kāi)發(fā)者修改原有實(shí)現(xiàn)再交給用戶(hù)評(píng)審。以上過(guò)程循環(huán)往復(fù),直至用戶(hù)滿(mǎn)意為止。

    時(shí)間代價(jià)高,但開(kāi)發(fā)質(zhì)量也高

    螺旋模型

    敏捷開(kāi)發(fā)

    通過(guò)快速迭代和小規(guī)模的持續(xù)改進(jìn)(每次迭代處理一個(gè)小規(guī)模增量),以快速適應(yīng)變化。

    軟件配置管理與版本控制系統(tǒng)

    一些概念:

    • 軟件配置管理:追蹤和控制軟件的變化
    • 軟件配置項(xiàng):軟件中發(fā)生變化的基本單元(如文件)
    • 基線:軟件持續(xù)變化過(guò)程中的“穩(wěn)定時(shí)刻”(如對(duì)外發(fā)布的版本)
    • 配置管理數(shù)據(jù)庫(kù)(CMDB):存儲(chǔ)軟件的各配置項(xiàng)隨時(shí)間發(fā)生變化的信息+基線
    • 版本:為軟件的任一特定時(shí)刻(Moment)的形態(tài)指派一個(gè)唯一的編號(hào),作為“身份標(biāo)識(shí)”
    • 本地版本控制系統(tǒng):倉(cāng)庫(kù)存儲(chǔ)于開(kāi)發(fā)者本地機(jī)器,無(wú)法共享和協(xié)作
    • 集中式版本控制系統(tǒng):倉(cāng)庫(kù)存儲(chǔ)于獨(dú)立的服務(wù)器,支持多開(kāi)發(fā)者之間的協(xié)作
    • 分布式版本控制系統(tǒng):倉(cāng)庫(kù)存儲(chǔ)于獨(dú)立的服務(wù)器+每個(gè)開(kāi)發(fā)者的本地機(jī)器

    Git——一種分布式版本控制工具

    見(jiàn)文章Git基礎(chǔ)知識(shí)及常用命令總結(jié)——Git基礎(chǔ)知識(shí)部分。

    軟件構(gòu)造整體過(guò)程

    語(yǔ)言、代碼評(píng)審、靜態(tài) / 動(dòng)態(tài)代碼分析、測(cè)試與調(diào)試、重構(gòu)……

    略,Chapter 3 課件P65 ~ P100。

    軟件構(gòu)造的狹義過(guò)程——Build

    略,P101 ~ P120。

    Chapter 4:Data Type and Type Checking

    編程語(yǔ)言中的數(shù)據(jù)類(lèi)型

    以Java為例,包括基本數(shù)據(jù)類(lèi)型和對(duì)象數(shù)據(jù)類(lèi)型,如下圖:


    對(duì)象類(lèi)型之間會(huì)形成層次結(jié)構(gòu)(繼承關(guān)系)。

    靜態(tài) / 動(dòng)態(tài)類(lèi)型檢查

    靜態(tài)類(lèi)型語(yǔ)言:在編譯階段進(jìn)行類(lèi)型檢查,如Java
    動(dòng)態(tài)類(lèi)型語(yǔ)言:在運(yùn)行階段進(jìn)行類(lèi)型檢查,如Python
    靜態(tài)類(lèi)型檢查 >> 動(dòng)態(tài) >> 無(wú)檢查(問(wèn)題越早發(fā)現(xiàn)越好)

    靜態(tài) / 動(dòng)態(tài)檢查

    靜態(tài)檢查主要檢查語(yǔ)法錯(cuò)誤、類(lèi)名/函數(shù)名錯(cuò)誤、參數(shù)數(shù)目及類(lèi)型錯(cuò)誤、返回值類(lèi)型錯(cuò)誤等。【關(guān)心types】
    動(dòng)態(tài)檢查主要檢查非法的參數(shù)值/返回值、越界及空指針等。【關(guān)心values】

    練習(xí):

    /* 例1 */ int n = 5; if (n) { // 靜態(tài)錯(cuò)誤:Type mismatch: cannot convert from int to booleann = n + 1; } /* 例2 */ int big = 200000; big *= big; // 無(wú)錯(cuò)誤,但得到錯(cuò)誤結(jié)果:1345294336 /* 例3 */ double p = 1/5; // 無(wú)錯(cuò)誤,但得到錯(cuò)誤結(jié)果:0.0 /* 例4 */ int sum = 0; int n = 0; int aver = sum / n; // 動(dòng)態(tài)錯(cuò)誤,拋出異常:java.lang.ArithmeticException: / by zero /* 例5 */ double sum = 7; double n = 0; double average = sum / n; // 結(jié)果為Infinity

    不可變性(inmutability) 與可變性(mutablity)

    不可變性(inmutablity):

    • 重要設(shè)計(jì)原則,更安全
    • 不可變數(shù)據(jù)類(lèi)型一旦被創(chuàng)建,其值不可改變
    • 盡量使用final變量作為方法的輸入?yún)?shù)和局部變量
    • 如果編譯器無(wú)法確定final變量不會(huì)改變,就提示錯(cuò)誤,這也是靜態(tài)類(lèi)型檢查的一部分
    • 使用不可變類(lèi)型,對(duì)其頻繁修改會(huì)產(chǎn)生大量的臨時(shí)拷貝(需要垃圾回收)

    可變性(mutability):

    • 值可修改
    • 可變類(lèi)型最少化拷貝以提高效率,更好的性能
    • 適合于在多個(gè)模塊之間共享數(shù)據(jù)
    • 考慮安全需進(jìn)行防御式拷貝

    不可變類(lèi)型示例——String

    String s = "a"; s += "b";

    對(duì)應(yīng)的Snapshot Diagram:

    可變類(lèi)型示例——StringBuilder

    StringBuilder sb = new StringBuilder("a"); sb.append("b");

    對(duì)應(yīng)的Snapshot Diagram:

    快照?qǐng)D(Snapshot Diagram)

    • 描述程序運(yùn)行時(shí)內(nèi)部狀態(tài)
    • 便于程序員之間的交流
    • 便于刻畫(huà)各類(lèi)變量隨時(shí)間變化
    • 便于解釋設(shè)計(jì)思路

    基本類(lèi)型的畫(huà)法

    對(duì)象類(lèi)型的畫(huà)法

    • 雙線/單線橢圓——不可變/可變對(duì)象(String與StringBuilder)
    • 雙線/單線箭頭——不可變/可變引用(如下圖)

    注意:

  • 不可變的引用其指向的值卻可以是可變的;
  • 可變的引用,也可指向不可變的值。
  • 練習(xí):

    復(fù)雜數(shù)據(jù)結(jié)構(gòu)

    • Array
    • List
    • Set
    • Map
      課件中介紹了以上數(shù)據(jù)類(lèi)型的基本使用方法(Chapter 4 P53 ~ P56),此處略。

    關(guān)于迭代器(Iterator)的remove()方法:自動(dòng)調(diào)整其內(nèi)部索引與刪除執(zhí)行后一致。

    一些有用的不可變類(lèi)型

    基本類(lèi)型及其封裝對(duì)象類(lèi)型都是不可變的;

    不可變包裝器提供不可變對(duì)象,例如:Collections.unmodifiableList()(禁用可變List中所有mutator方法,但這種不可變是在運(yùn)行階段獲得的,編譯階段無(wú)法據(jù)此進(jìn)行靜態(tài)檢查)。

    總結(jié)

    以上是生活随笔為你收集整理的哈工大软件构造课程知识点总结(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。