国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

軟件工程:數(shù)據(jù)流圖,智能汽車代碼功能實(shí)現(xiàn)(Java)

這篇具有很好參考價(jià)值的文章主要介紹了軟件工程:數(shù)據(jù)流圖,智能汽車代碼功能實(shí)現(xiàn)(Java)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

軟件工程:數(shù)據(jù)流圖,智能汽車代碼功能實(shí)現(xiàn)

軟件工程

簡(jiǎn)介

軟件工程:數(shù)據(jù)流圖,智能汽車代碼功能實(shí)現(xiàn)(Java)
軟件工程:數(shù)據(jù)流圖,智能汽車代碼功能實(shí)現(xiàn)(Java)

開閉原則

軟件實(shí)現(xiàn)應(yīng)該對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉,其含義是說一個(gè)軟件實(shí)體應(yīng)該通過擴(kuò)展來實(shí)現(xiàn)變化,而不是通過修改已有的代碼來實(shí)現(xiàn)變化的

智能汽車中,確定汽車的加速/減速

軟件工程:數(shù)據(jù)流圖,智能汽車代碼功能實(shí)現(xiàn)(Java)

速度接口

//速度接口
public interface MphInter {
    String getMph(int rpm);
}

速度實(shí)現(xiàn)抽象為父類

//1.速度實(shí)現(xiàn)類,抽象為父類
public abstract class Mph implements MphInter {
    //2.將轉(zhuǎn)速轉(zhuǎn)化為速度
    @Override
    public abstract String getMph(int rpm);
}

速度控制,子類ControlRpm繼承抽象父類

public class ControlRpm extends Mph {
    //1.定義速度mph
    private int mph;
	//2.重寫父類方法
    @Override
    public String getMph(int rpm) {
        /*3.通過傳入?yún)?shù)rpm,
       經(jīng)過一系列計(jì)算得到了速度mph
       ...
       ...
       */
        //4.比如最后獲得到的速度mgh為90邁
        mph = 90;
        //5.這里為了簡(jiǎn)化邏輯,直接設(shè)為加速裝填,本來應(yīng)該和前一個(gè)速度相比來判斷加速還是減速
        boolean control_speed = true;
        if (control_speed == true) {
            return "+" + mph;
        } else {
            return "-" + mph;
        }
    }
    
    public int getMph() {
        return mph;
    }
}

如果不使用開閉原則,將速度控制方法寫于速度實(shí)現(xiàn)類中

public class Mph implements MphInter {
    //1.定義速度mph
    private int mph;

    //2.將轉(zhuǎn)速轉(zhuǎn)化為速度
    @Override
    public int getMph(int rpm) {
        /*4.通過傳入?yún)?shù)rpm,
        經(jīng)過一系列計(jì)算得到了速度mph
        ...
        ...
        */
        //5.比如最后獲得到的速度mgh為90邁
        mph = 90;
        return mph;
    }
    public ControlRpm() {
    }
    public String controlRpm(boolean control_speed){
        if(control_speed == true){
            return "+";
        }else{
            return "-";
        }
    }
    
}

那么后續(xù),如果出現(xiàn)其他需求,比如將速度控制換成 ↑和↓的箭頭,或者其他情況

  • 修改接口

    接口MphInter新增方法后,他的實(shí)現(xiàn)類Mph也需要重寫接口方法,同時(shí)接口應(yīng)該是比較穩(wěn)定可靠的,不應(yīng)該隨意修改。

  • 修改實(shí)現(xiàn)類

    修改Mph類的方法,新增了一個(gè)getContrlolRpm的方法,那么將出現(xiàn)兩個(gè)讀取速度的方法,可以實(shí)現(xiàn)需求但不是最優(yōu)解

  • 通過擴(kuò)展實(shí)現(xiàn)變化

    我們可以增加一個(gè)子類ControlRpm,來繼承父類Mph類,覆寫getMph方法(為了簡(jiǎn)化速度控制邏輯,重新寫了一個(gè)方法controlRpm進(jìn)行替代)

后續(xù)有新的要求后,可以直接新建子類,繼承父類
既可以保證新需求可以實(shí)現(xiàn),又可以保證先有功能的穩(wěn)定

里氏替換原則

在上述開閉原則中,同時(shí)也實(shí)現(xiàn)類里氏替換原則,將父類Mph設(shè)計(jì)為抽象類,讓子類ControlRpm繼承父類并實(shí)現(xiàn)在父類中聲明的方法getMph(int rpm)
可以很方便地?cái)U(kuò)展系統(tǒng)的功能,無需修改原有子類的代碼,增加新的功能可以通過增加一個(gè)新的子類來實(shí)現(xiàn)。

單一職責(zé)原則

一個(gè)對(duì)象應(yīng)該只包含單一的職責(zé),并且該職責(zé)被完整地封裝在一個(gè)類中。

  • 接受傳感信號(hào)

    拆分成了兩個(gè)類:SpsTranslateRpm類 和 FuelConsumption類

    sps轉(zhuǎn)化成rpm實(shí)現(xiàn)類
    public class SpsTranslateRpm implements SpsTranslateRpmInter

    油耗量實(shí)現(xiàn)對(duì)象

    public class FuelConsumption implements FuelConsumptionInter

  • 數(shù)據(jù)轉(zhuǎn)化控制

    拆分為兩個(gè)類:Mile類 、 Mph類 、ControlRpm類

    英里實(shí)現(xiàn)類
    public class Mile implements MileInter

? 速度實(shí)現(xiàn)類,抽象為父類
? public abstract class Mph implements MphInter

? //速度控制類,Mph的子類

? public class ControlRpm extends Mph

  • 驅(qū)動(dòng)儀表板

    拆分為兩個(gè)類:LedShow類 、RingAlarm類

? 發(fā)光二極管顯示實(shí)現(xiàn)類
? public class LedShow implements LedShowInter

? 響鈴接口實(shí)現(xiàn)類,實(shí)現(xiàn)超速響鈴
? public class RingAlarm implements RingAlarmInter

提高類的可維護(hù)性和可讀寫性 一個(gè)類的職責(zé)少了,復(fù)雜度降低了,代碼就少了,可讀性也就好了,可維護(hù)性自然就高了。

降低變更的風(fēng)險(xiǎn) 一個(gè)類的職責(zé)越多,變更的可能性就越大,變更帶來的風(fēng)險(xiǎn)也就越大

接口隔離原則

客戶端不應(yīng)該依賴它不需要的接口;一個(gè)類對(duì)另一個(gè)類的依賴應(yīng)該建立在最小的接口上。

軟件工程:數(shù)據(jù)流圖,智能汽車代碼功能實(shí)現(xiàn)(Java)

//油耗量接口
public interface FuelConsumptionInter {
    double getMpg(int gph,int mph);
}
//發(fā)光二極管顯示接口
public interface LedShowInter {
    void ledShow(String something);
}
//行使英里接口
public interface MileInter {
    //得到行使的英里   (rpm轉(zhuǎn)速)
    int getMile(int rpm, int time);
}
//速度接口
public interface MphInter {
    String getMph(int rpm);
}
//超速響鈴接口
public interface RingAlarmInter {
    void ring(int mph);
}
//將Sps轉(zhuǎn)化成rpm的接口
public interface SpsTranslateRpmInter {
    int getRpm(int sps);

}

迪米特法則

如果兩個(gè)類不必彼此直接通信,那么這兩個(gè)類就不應(yīng)當(dāng)發(fā)生直接的相互作用。如果其中的一個(gè)類需要調(diào)用另一個(gè)類的某一個(gè)方法的話,可以通過第三者轉(zhuǎn)發(fā)這個(gè)調(diào)用。

在對(duì)其他類的引用上,將引用其他對(duì)象的次數(shù)降到最低,降低類的耦合

在數(shù)字控制面板中,對(duì)于對(duì)象與對(duì)象之間,只能通過get之類的方法來獲得其中的對(duì)象值,對(duì)象并不能直接調(diào)用另一個(gè)對(duì)象的變量。
限制另一個(gè)類對(duì)本類成員的訪問權(quán)限

        //1.計(jì)算rpm  轉(zhuǎn)速    mph結(jié)果為設(shè)置的2500
        int rpm = STR.getRpm(125);
        //2.計(jì)算英里
        int total_mile = mile.getMile(rpm, 3);
        //3.計(jì)算速度     speed為設(shè)置的90邁
        String speed = control.getMph(rpm);
        //4.計(jì)算油耗量        結(jié)果計(jì)算為450/90=50
        double fuel_loss = fuelConsumption.getMpg(450, control.getMph());

油耗的計(jì)算中也定義了參數(shù)mph,避免了直接調(diào)用ControlRpm類的成員變量mph

    public double getMpg(int gph, int mph) {
        mpg = mph*1.0 / gph;
        return mpg;
    }

對(duì)于ControlRpm類,也是只能通過getMph()來獲取成員變量mph

    public int getMph() {
        return mph;
    }

完整代碼實(shí)現(xiàn)

補(bǔ)充:數(shù)字儀表盤設(shè)置為抽象類,以適應(yīng)不同類型的車

接口

分別建立接口文件
FuelConsumptionInter
LedShowInter
MileInter
MphInter
RingAlarmInter
SpsTranslateRpmInter

//油耗量接口
public interface FuelConsumptionInter {
    double getMpg(int gph,int mph);
}
//發(fā)光二極管顯示接口
public interface LedShowInter {
    void ledShow(String something);
}
//行使英里接口
public interface MileInter {
    //得到行使的英里   (rpm轉(zhuǎn)速)
    int getMile(int rpm, int time);
}
//速度接口
public interface MphInter {
    String getMph(int rpm);
}
//超速響鈴接口
public interface RingAlarmInter {
    void ring(int mph);
}
//將Sps轉(zhuǎn)化成rpm的接口
public interface SpsTranslateRpmInter {
    int getRpm(int sps);

}

接口實(shí)現(xiàn)類

建立文件

FuelConsumption
LedShow
Mile
Mph
RingAlarm
SpsTranslateRpm
ControlRpm

//油耗量實(shí)現(xiàn)對(duì)象
public class FuelConsumption implements FuelConsumptionInter {
    //定義mpg為:一加侖能夠行駛的英里
    private double mpg;


    //計(jì)算mpg的值并返回(gph為油耗量)
    @Override
    public double getMpg(int gph, int mph) {
        mpg = mph*1.0 / gph;
        return mpg;
    }
}
//發(fā)光二極管顯示實(shí)現(xiàn)類
public class LedShow implements LedShowInter {
    //傳入需要顯示的內(nèi)容
    @Override
    public void ledShow(String something) {
        System.out.println(something);
    }

}
//英里實(shí)現(xiàn)類
public class Mile implements MileInter {
    private int totalMile;

    //計(jì)算總的英里數(shù)(rpm轉(zhuǎn)速)
    @Override
    public int getMile(int rpm, int time) {
        totalMile = rpm * time;
        return totalMile;
    }
}
//速度實(shí)現(xiàn)類,抽象為父類
public abstract class Mph implements MphInter {

    //2.將轉(zhuǎn)速轉(zhuǎn)化為速度
    @Override
    public abstract String getMph(int rpm);
}

//響鈴接口實(shí)現(xiàn)類,實(shí)現(xiàn)超速響鈴
public class RingAlarm implements RingAlarmInter{
    //1.定義常量最高速度   和  響鈴
    private static final int SPEED_LIMIT = 80;
    //2.默認(rèn)不響鈴
    private boolean ring_alarm = false;


    @Override
    public void ring(int mph) {
        if(mph>=80){
            System.out.println("超速");
            //把響鈴設(shè)置為true
            ring_alarm = true;
        }
    }

    public boolean isRing_alarm() {
        return ring_alarm;
    }
}
//sps轉(zhuǎn)化成rpm實(shí)現(xiàn)類
public class SpsTranslateRpm implements SpsTranslateRpmInter {

    @Override
    //通過sps來計(jì)算rpm(轉(zhuǎn)速),并返回
    public int getRpm(int sps) {
        /*通過一系列計(jì)算,
        將sps轉(zhuǎn)換成了rpm
        */
        //假設(shè)得到最終轉(zhuǎn)化結(jié)果rpm為2500
        int rpm = 2500;

        return rpm;
    }
}
//速度控制類,Mph的子類
public class ControlRpm extends Mph {
    //1.定義速度mph
    private int mph;
    
    @Override
    public String getMph(int rpm) {
        /*4.通過傳入?yún)?shù)rpm,
       經(jīng)過一系列計(jì)算得到了速度mph
       ...
       ...
       */
        //5.比如最后獲得到的速度mgh為90邁
        mph = 90;
        boolean control_speed = true;
        if (control_speed == true) {
            return "+" + mph;
        } else {
            return "-" + mph;
        }
    }

    public int getMph() {
        return mph;
    }
}

儀表盤數(shù)字控制類

//數(shù)字儀表板控制
public abstract class DigitalDashboardControl {
    //1.創(chuàng)建油耗量對(duì)象
    private FuelConsumption fuelConsumption;
    //2.創(chuàng)建sps轉(zhuǎn)化rpm對(duì)象
    private SpsTranslateRpm STR;
    //3.創(chuàng)建速度對(duì)象
    private Mph mph;
    //4.創(chuàng)建行使英里對(duì)象
    private Mile mile;
    //5.創(chuàng)建發(fā)光二極管顯示對(duì)象
    private LedShow ledShow;
    //6.創(chuàng)建超速警告對(duì)象
    private RingAlarm ringAlarm;
    //7.創(chuàng)建速度控制對(duì)象
    private ControlRpm control;

    public DigitalDashboardControl() {
        fuelConsumption = new FuelConsumption();
        STR = new SpsTranslateRpm();
        mile = new Mile();
        ledShow = new LedShow();
        ringAlarm = new RingAlarm();
        control  = new ControlRpm();
    }

    public void control() {
        //1.計(jì)算rpm  轉(zhuǎn)速    mph結(jié)果為設(shè)置的2500
        int rpm = STR.getRpm(125);
        //2.計(jì)算英里
        int total_mile = mile.getMile(rpm, 3);
        //3.計(jì)算速度     speed為設(shè)置的90邁
        String speed = control.getMph(rpm);
        //4.計(jì)算油耗量        結(jié)果計(jì)算為450/90=50
        double fuel_loss = fuelConsumption.getMpg(450, control.getMph());

        //5.二極管顯示油耗量和里程
        ledShow.ledShow("油耗量:" + fuel_loss);
        ledShow.ledShow("里程:" + total_mile);

//        //6.1獲取加速或者減速狀態(tài) ,flag  為當(dāng)前加速+  減速- 狀態(tài)
//        String flag = control.controlRpm(true);
        //6.2二極管顯示速度
        ledShow.ledShow("速度:"+control.getMph(rpm));

        //7.獲取響鈴狀態(tài)如果鈴聲打開中,則在響鈴
        //  當(dāng)前速度為90,  限制的速度為80
        ringAlarm.ring(control.getMph());
        if(ringAlarm.isRing_alarm()==true){
            System.out.println("正在響鈴");
        }

    }
}

汽車類

Bus

public class Bus extends DigitalDashboardControl{
    public Bus() {
    }
}

測(cè)試類

Test

public class Test {
    public static void main(String[] args) {

        Bus bus = new Bus();
        bus.control();

    }
}

程序運(yùn)行

軟件工程:數(shù)據(jù)流圖,智能汽車代碼功能實(shí)現(xiàn)(Java)文章來源地址http://www.zghlxwxcb.cn/news/detail-421917.html

到了這里,關(guān)于軟件工程:數(shù)據(jù)流圖,智能汽車代碼功能實(shí)現(xiàn)(Java)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ?工信工實(shí)驗(yàn)參考——《VHDL實(shí)驗(yàn)1——Quartus軟件入門及雙(單)向數(shù)據(jù)流總線的設(shè)計(jì)》

    ?工信工實(shí)驗(yàn)參考——《VHDL實(shí)驗(yàn)1——Quartus軟件入門及雙(單)向數(shù)據(jù)流總線的設(shè)計(jì)》

    一般來說,我貼上來的代碼都是能直接跑的,如果不行可以郵箱交流1902946954@qq.com 僅供參考,微機(jī)的老師講的很好,所以請(qǐng)還是要先自己完成咯。 免責(zé)聲明,本人菜只因一只,內(nèi)容僅供參考,錯(cuò)了不負(fù)責(zé)哈 地 ????????? 點(diǎn): ???? 31? 樓 ? 312房; 實(shí)驗(yàn)臺(tái)號(hào): 實(shí)驗(yàn)日期與

    2024年02月06日
    瀏覽(19)
  • 軟件工程中的人工智能:如何提高開發(fā)效率

    隨著人工智能技術(shù)的發(fā)展,人工智能在軟件工程領(lǐng)域的應(yīng)用也越來越廣泛。人工智能可以幫助軟件工程師更高效地進(jìn)行軟件開發(fā),提高開發(fā)效率。在這篇文章中,我們將討論人工智能在軟件工程中的應(yīng)用,以及如何利用人工智能提高開發(fā)效率。 軟件工程是一項(xiàng)復(fù)雜的技術(shù),涉

    2024年02月21日
    瀏覽(21)
  • 什么是Vue的數(shù)據(jù)流(單向數(shù)據(jù)流)?如何進(jìn)行數(shù)據(jù)流管理

    什么是Vue的數(shù)據(jù)流(單向數(shù)據(jù)流)?如何進(jìn)行數(shù)據(jù)流管理

    在Vue中,數(shù)據(jù)流是指數(shù)據(jù)的傳遞和管理方式。Vue采用的是單向數(shù)據(jù)流,也就是說,數(shù)據(jù)是從父組件流向子組件,子組件不能直接修改父組件的數(shù)據(jù)。本文將介紹Vue的數(shù)據(jù)流機(jī)制,以及如何進(jìn)行數(shù)據(jù)流管理。 Vue的數(shù)據(jù)流機(jī)制可以分為兩類:props和events。 Props 在Vue中,父組件可以

    2024年02月08日
    瀏覽(20)
  • 人工智能時(shí)代,軟件工程師們將會(huì)被取代?

    人工智能時(shí)代,軟件工程師們將會(huì)被取代?

    作者 :明明如月學(xué)長(zhǎng), CSDN 博客專家,螞蟻集團(tuán)高級(jí) Java 工程師,《性能優(yōu)化方法論》作者、《解鎖大廠思維:剖析《阿里巴巴Java開發(fā)手冊(cè)》》、《再學(xué)經(jīng)典:《EffectiveJava》獨(dú)家解析》專欄作者。 熱門文章推薦 : (1)《人工智能時(shí)代,軟件工程師們將會(huì)被取代?》 (2)

    2024年01月25日
    瀏覽(35)
  • 軟件工程中的人工智能與機(jī)器學(xué)習(xí):未來研發(fā)效能的驅(qū)動(dòng)力

    人工智能(Artificial Intelligence, AI)和機(jī)器學(xué)習(xí)(Machine Learning, ML)在過去的幾年里已經(jīng)成為軟件工程中最熱門的話題之一。隨著數(shù)據(jù)量的增加,計(jì)算能力的提升以及算法的創(chuàng)新,人工智能和機(jī)器學(xué)習(xí)技術(shù)已經(jīng)成為軟件開發(fā)過程中不可或缺的一部分。 在軟件工程中,人工智能和機(jī)器學(xué)

    2024年02月21日
    瀏覽(19)
  • 銀行儲(chǔ)蓄系統(tǒng)的頂層數(shù)據(jù)流圖及細(xì)化數(shù)據(jù)流圖

    銀行儲(chǔ)蓄系統(tǒng)的頂層數(shù)據(jù)流圖及細(xì)化數(shù)據(jù)流圖

    繪制出銀行儲(chǔ)蓄系統(tǒng)的頂層數(shù)據(jù)流圖及細(xì)化數(shù)據(jù)流圖; 銀行儲(chǔ)蓄系統(tǒng)存、取款流程如下: 1)業(yè)務(wù)員事先錄入利率信息; 2)如果是存款,儲(chǔ)戶填寫存款單,業(yè)務(wù)員將存款單鍵入系統(tǒng),系統(tǒng)更新儲(chǔ)戶存款信息(存款人姓名、存款人賬號(hào)、電話號(hào)碼、身份證號(hào)碼、存款金額、存

    2024年01月17日
    瀏覽(22)
  • Elasticsearch:將 ILM 管理的數(shù)據(jù)流遷移到數(shù)據(jù)流生命周期

    Elasticsearch:將 ILM 管理的數(shù)據(jù)流遷移到數(shù)據(jù)流生命周期

    警告 :此功能處于技術(shù)預(yù)覽階段,可能會(huì)在未來版本中更改或刪除。 Elastic 將努力解決任何問題,但技術(shù)預(yù)覽版中的功能不受官方 GA 功能的支持 SLA 的約束。目前的最新版本為 8.12。 在本教程中,我們將了解如何將現(xiàn)有數(shù)據(jù)流(data stream)從索引生命周期管理 (ILM) 遷移到數(shù)據(jù)

    2024年04月29日
    瀏覽(28)
  • 【研究生復(fù)試】計(jì)算機(jī)&軟件工程&人工智能研究生復(fù)試——資料整理(速記版)——計(jì)算機(jī)網(wǎng)絡(luò)

    【研究生復(fù)試】計(jì)算機(jī)&軟件工程&人工智能研究生復(fù)試——資料整理(速記版)——計(jì)算機(jī)網(wǎng)絡(luò)

    1、JAVA 2、計(jì)算機(jī)網(wǎng)絡(luò) 3、計(jì)算機(jī)體系結(jié)構(gòu) 4、數(shù)據(jù)庫 5、計(jì)算機(jī)租場(chǎng)原理 6、軟件工程 7、大數(shù)據(jù) 8、英文 自我介紹 序列號(hào):TCP所傳送的每段數(shù)據(jù)都有標(biāo)有序列號(hào),避免亂序問題 發(fā)送端確認(rèn)應(yīng)答、超時(shí)重傳:解決丟包問題 滑動(dòng)窗口:避免速度過快或多慢丟包和亂序問題 HTTP是無

    2024年02月19日
    瀏覽(92)
  • Flink數(shù)據(jù)流

    Flink數(shù)據(jù)流

    官網(wǎng)介紹 Apache Flink 是一個(gè)框架和分布式處理引擎,用于對(duì)無界和有界數(shù)據(jù)流進(jìn)行有狀態(tài)計(jì)算。Flink 被設(shè)計(jì)為在所有常見的集群環(huán)境中運(yùn)行,以內(nèi)存中的速度和任何規(guī)模執(zhí)行計(jì)算。 1.無限流有一個(gè)開始,但沒有定義的結(jié)束。它們不會(huì)在生成數(shù)據(jù)時(shí)終止并提供數(shù)據(jù)。必須連續(xù)處

    2024年02月17日
    瀏覽(20)
  • postman 數(shù)據(jù)流請(qǐng)求

    postman 數(shù)據(jù)流請(qǐng)求

    備注: Postman version : Version 9.21.3 Windows 版本 1.修改headers 2.Body 部分 選擇raw 格式數(shù)據(jù) 3.最后執(zhí)行請(qǐng)求

    2024年02月11日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包