<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      第三次Blog作業——對本門課程的總結

      前言

      在本學期面向對象程序設計的學習過程中,完成許多任務了:

      • PTA作業:前三次題目集主要是對程序設計基礎知識的回顧。到第四次題目集,接觸到類的概念并開始了我人生中第一次類設計。從第五次到第七次題目集是對單部電梯調度程序的設計和迭代,第八次和第九次題目集是對航空貨運管理系統的設計和迭代。最后兩次題目集則是到了集合框架和期末復習。
      • Blog作業:分別是對PTA作業中的程序設計與迭代的總結,和本次作業對整門課程的總結。
      • 實驗:實驗一主要是Java環境的安裝和測試,實驗二到四是對大象裝冰箱程序的不斷迭代和設計,實驗五是使用JavaFX技術為大象裝冰箱程序引入圖形界面。
      • 線上課程以及線下課程:對使用Java進行面向對象程序設計的知識進行講解。

      面向對象技術總結

      一、封裝

      核心思想:將數據與操作數據的方法綁定在一起,隱藏內部實現細節,僅暴露必要的接口。

      實現方式:

      訪問修飾符:
      • private:僅當前類可見(最嚴格的封裝)。
      • public:全項目可見。
      • protected:同包或子類可見。
      • 默認(無修飾符):同包可見。
      getter/setter 方法:

      通過公共方法訪問和修改私有屬性。

      點擊查看代碼
      class Point
      {
          private double x;
          private double y;
      
          public Point()
          {
              x = 0;
              y = 0;
          }
      
          public Point(double x, double y)
          {
              this.x = x;
              this.y = y;
          }
      
          public double getX()
          {
              return x;
          }
      
          public void setX(double x)
          {
              this.x = x;
          }
      
          public double getY()
          {
              return y;
          }
      
          public void setY(double y)
          {
              this.y = y;
          }
      
          public void dispaly()
          {
              System.out.printf("(%.2f,%.2f)\n" , x, y);
          }
      
      }
      
      來自實驗七:點與線

      二、繼承

      核心思想:子類繼承父類的屬性和方法,實現代碼復用。

      關鍵特性:

      關鍵字:extends(Java 只支持單繼承)。
      構造函數調用:子類構造函數默認調用父類無參構造(super())。
      方法重寫(Override):子類可覆蓋父類方法,需滿足:
      • 方法名、參數列表、返回類型完全一致。
      • 訪問修飾符不能比父類更嚴格。
      super 關鍵字:訪問父類的屬性或方法。
      點擊查看代碼
      class Lion extends Animal
      {
          public Lion(String name, int weight, int height)
          {
              super(name, weight, height);
          }
      
          @Override
          public void cry()
          {
              System.out.println(getName() + ":怒吼一聲");
          }
      
          @Override
          public int getAttackPower()
          {
              return 1;
          }
      }
      
      來自實驗四
      繼承是 “is-a” 關系(如 Dog is-a Animal)。
      父類的private成員無法被繼承。

      三、多態

      核心思想:同一操作作用于不同對象,產生不同的執行結果。

      兩種形式:

      編譯時多態(靜態多態):

      通過方法重載(Overload)實現。
      • 要求:方法名相同,參數列表不同(類型 / 順序 / 數量)。

      運行時多態(動態多態):
      • 通過方法重寫和父類引用指向子類對象實現。
      點擊查看代碼
      Animal animal = new Lion();  // 父類引用指向子類對象
      animal.cry();  // 調用Lion的cry()方法(動態綁定)
      
      來自實驗四
      優勢:
      • 提高代碼擴展性(如新增子類無需修改調用方代碼)。
      • 實現接口復用,降低耦合度。

      四、抽象類

      定義:

      包含abstract關鍵字的類,不能直接實例化。

      特點:

      • 可包含抽象方法(無方法體,需子類實現)和普通方法。
      • 子類必須實現所有抽象方法(除非子類也是抽象類)。
      點擊查看代碼
      abstract class Cargo implements Ratable
      {
          private int id;
          private String name;
      
          private double length;
          private double width;
          private double height;
      
          private double grossWeight;
      
          public Cargo()
          {
          }
      
          public Cargo(int id, String name, double length, double width, double height, double grossWeight)
          {
              this.id = id;
              this.name = name;
              this.length = length;
              this.width = width;
              this.height = height;
              this.grossWeight = grossWeight;
          }
      
          public int getId()
          {
              return id;
          }
      
          public void setId(int id)
          {
              this.id = id;
          }
      
          public String getName()
          {
              return name;
          }
      
          public void setName(String name)
          {
              this.name = name;
          }
      
          public double getLength()
          {
              return length;
          }
      
          public void setLength(double length)
          {
              this.length = length;
          }
      
          public double getWidth()
          {
              return width;
          }
      
          public void setWidth(double width)
          {
              this.width = width;
          }
      
          public double getHeight()
          {
              return height;
          }
      
          public void setHeight(double height)
          {
              this.height = height;
          }
      
          public double getGrossWeight()
          {
              return grossWeight;
          }
      
          public void setGrossWeight(double grossWeight)
          {
              this.grossWeight = grossWeight;
          }
      
          public double getVolumeWeight()
          {
              return length * width * height / 6000;
          }
      
          public double getFeeWeight()
          {
              return Math.max(grossWeight, getVolumeWeight());
          }
      
          public double getCost()
          {
              return getFeeWeight() * getRate();
          }
      }
      
      class NormalCargo extends Cargo
      {
          public NormalCargo()
          {
          }
      
          public NormalCargo(int id, String name, double length, double width, double height, double grossWeight)
          {
              super(id, name, length, width, height, grossWeight);
          }
      
          @Override
          public double getRate()
          {
              if (getFeeWeight() < 20)
              {
                  return 35;
              }
              else if (getFeeWeight() < 50)
              {
                  return 30;
              }
              else if (getFeeWeight() < 100)
              {
                  return 25;
              }
              else
              {
                  return 15;
              }
          }
      }
      
      來自題目集九:航空貨運管理系統

      五、接口

      定義:

      使用interface關鍵字,本質是特殊的抽象類(全是抽象方法)。

      特點:

      • 接口中的屬性默認是public static final。
      • 子類用implements實現接口,需實現所有抽象方法。
      點擊查看代碼
      interface Ratable
      {
          double getRate();
      }
      
      來自題目集九:航空貨運管理系統

      六、集合框架

      核心架構:以java.util包為核心,分為Collection和Map兩大體系。

      1. Collection 體系(存儲單個元素)

      List 接口:有序、可重復,實現類包括:
      • ArrayList:基于數組,隨機訪問快,增刪慢。
      • LinkedList:基于鏈表,增刪快,隨機訪問慢。
      • Vector:線程安全(已過時,推薦CopyOnWriteArrayList)。
      Set 接口:無序、不可重復,實現類包括:
      • HashSet:基于哈希表,查詢快,插入順序不保留。
      • TreeSet:基于紅黑樹,元素有序(需實現Comparable)。
      • LinkedHashSet:保留插入順序,結合哈希表和鏈表。
      • Queue 接口:隊列(先進先出),實現類如LinkedList、PriorityQueue。

      2. Map 體系(存儲鍵值對)

      • HashMap:基于哈希表,查詢和修改效率高(非線程安全)。
      • TreeMap:基于紅黑樹,鍵有序(需實現Comparable)。
      • ConcurrentHashMap:線程安全的高效 Map(Java 8 后用分段鎖優化)。
      • Hashtable:線程安全(已過時,不推薦)。

      常用操作:

      • 遍歷:for-each、迭代器(Iterator)、Lambda 表達式(Java 8+)。
      • 泛型:List、Map<Integer, Object>,避免類型轉換異常。

      七、異常

      異常是程序運行時的錯誤,Java 通過try-catch-finally和throws機制處理。

      異常分類:

      • Checked Exception:必須顯式處理(如IOException)
      • Unchecked Exception:繼承自RuntimeException(如NullPointerException)
      • Error:系統級錯誤(如OutOfMemoryError)
      點擊查看代碼
          public static void savePaid(OrderManager orderManager)
          {
              try (FileWriter writer = new FileWriter("order_manager.txt", true))
              {
                  writer.write(orderManager.toString());
                  writer.write(System.lineSeparator());
              }
              catch (IOException e)
              {
                  e.printStackTrace();
              }
          }
      
      來自JavaFX作業

      八、JavaFX

      核心組件:

      • 控件:Button、TextField、TableView、Chart等。
      • 布局:BorderPane、HBox、VBox、GridPane。
      • 事件處理:Lambda 表達式或匿名內部類(如button.setOnAction(e -> System.out.println("Clicked")))。
      點擊查看代碼
      import javafx.application.Application;
      import javafx.geometry.Insets;
      import javafx.geometry.Orientation;
      import javafx.scene.Scene;
      import javafx.scene.control.*;
      import javafx.scene.layout.*;
      import javafx.scene.paint.Color;
      import javafx.scene.text.Font;
      import javafx.scene.text.Text;
      import javafx.stage.Stage;
      
      public class Main extends Application
      {
      
          public static void main(String[] args)
          {
              launch(args);
          }
      
          @Override
          public void start(Stage primaryStage)
          {
              primaryStage.setTitle("JavaFX Slider 功能演示");
              BorderPane root = new BorderPane();
              root.setPadding(new Insets(20));
      
              // 創建頂部標題
              Text title = new Text("JavaFX Slider 功能演示");
              title.setFont(Font.font("Arial", 24));
              title.setFill(Color.DARKBLUE);
              HBox titleBox = new HBox(title);
              titleBox.setPadding(new Insets(0, 0, 20, 0));
              titleBox.setAlignment(javafx.geometry.Pos.CENTER);
              root.setTop(titleBox);
      
              // 創建滑塊演示區域
              VBox sliderDemoBox = new VBox(20);
              sliderDemoBox.setPadding(new Insets(20));
              sliderDemoBox.setBorder(new Border(new BorderStroke(Color.LIGHTGRAY, BorderStrokeStyle.SOLID, CornerRadii.EMPTY, BorderWidths.DEFAULT)));
      
              // 水平滑塊
              Label basicSliderLabel = new Label("水平滑塊:");
              Slider basicSlider = new Slider(0, 100, 50);
      
      //        basicSlider.setShowTickLabels(true); // 顯示刻度
      //        basicSlider.setShowTickMarks(true); // 顯示刻度線
      //        basicSlider.setMajorTickUnit(20); // 設置主刻度間隔
      //        basicSlider.setMinorTickCount(4); // 設置每個主刻度間的小刻度數量
      
              Label basicSliderValueLabel = new Label("當前值: " + basicSlider.getValue());
      //         觀察者模式獲取Slider的值
      //        basicSlider.valueProperty().addListener((observable, oldValue, newValue) ->
      //        {
      //            basicSliderValueLabel.setText("當前值: " + String.format("%.1f", newValue.doubleValue()));
      //        });
      
              VBox basicSliderBox = new VBox(10, basicSliderLabel, basicSlider, basicSliderValueLabel);
      
              // 垂直滑塊
              Label verticalSliderLabel = new Label("垂直滑塊:");
              Slider verticalSlider = new Slider(0, 30, 15);
      //        verticalSlider.setOrientation(Orientation.VERTICAL); // 設置為垂直滑塊,默認值為HORIZONTAL
      
      //                verticalSlider.setShowTickLabels(true); // 顯示刻度
      //                verticalSlider.setShowTickMarks(true); // 顯示刻度線
      //                verticalSlider.setMajorTickUnit(10); // 設置主刻度間隔
      //                verticalSlider.setMinorTickCount(1); // 設置每個主刻度間的小刻度數量
      
              HBox verticalSliderBox = new HBox(20, verticalSliderLabel, verticalSlider);
              verticalSliderBox.setAlignment(javafx.geometry.Pos.CENTER_LEFT);
      
              // 添加所有滑塊演示到主區域
              sliderDemoBox.getChildren().addAll(basicSliderBox, verticalSliderBox);
              root.setCenter(sliderDemoBox);
              Scene scene = new Scene(root, 600, 800);
              primaryStage.setScene(scene);
              primaryStage.show();
          }
      }
      
      翻轉課堂的示例

      踩坑心得

      一、冷靜和耐心

      寫PTA熬到深夜,代碼始終跑不通。

      這不是我一個人的經歷,許多同學也有共同的體驗。究其原因,不僅僅是審題和題目難度的問題,還有在一次又一次的失敗面前紅溫,最終失去耐心,進行著沒有意義的嘗試。面對難題,清醒的頭腦和百折不撓的耐心是很重要的品質。

      二、合理的設計

      對于一個需要不斷迭代的項目來說,一個合理的設計非常重要。
      在我一開始設計類的時候,這一點就做的非常不好。比如單部電梯調度程序,根本就沒有設計,先寫代碼,然后拿著代碼生成類圖,結果生成了一團蜘蛛網

      這對于后續的迭代造成了極大的困難。

      改進建議及總結

      建議

      1. 希望提交實驗不要手敲代碼,這真的太折磨了。雖然代碼可以復制上一次的實驗,但是實驗提交系統的用戶體驗實在是太糟糕了,沒有ide的自動補全和錯誤提示也就算了,甚至連顯示空白字符的功能也沒有。不僅如此,在這個實驗提交系統上打字也很不舒服,用起來還不如記事本。
      2. 希望線上課程的作業部分的答案能夠合理一些,比如答案是"final"和"static",輸入是"static"和"final",還有答案是"super()";,輸入是"super()"。這種情況都能被判錯誤。
      3. 希望實驗指導書的內容能夠具體一些,有的地方指導書要求實現每個功能,但這個功能應該用在什么地方卻沒有提及,經常搞得人一頭霧水。

      總結

      本學期的面向對象程序設計學習,是從基礎語法到復雜系統設計的全面進階。從最初通過 PTA 題目集回顧 Java 基礎,到逐步接觸類設計、電梯調度與航空貨運系統的迭代開發,每一次作業和實驗都推動著對封裝、繼承、多態等核心思想的理解從理論走向實踐。印象最深的是在單部電梯調度程序中,因初期類設計不合理導致的代碼混亂,讓我深刻認識到面向對象設計中 “高內聚、低耦合” 的重要性;而 JavaFX 圖形界面的開發,則讓我體會到面向對象思想在跨領域應用中的靈活性。
      實驗與 Blog 作業的結合,幫助我將碎片化的知識系統化 —— 從大象裝冰箱程序的迭代到航空貨運系統的架構設計,每一次總結都伴隨著對代碼邏輯的重新審視。盡管在 PTA 作業中多次因細節錯誤熬夜調試,也在實驗提交系統中遇到過操作不便的問題,但這些挑戰反而強化了查錯能力和耐心。如今再回顧最初生成的 “蜘蛛網” 類圖,更能感受到從 “面向過程” 到 “面向對象” 思維轉變的價值。這門課程不僅夯實了 Java 編程基礎,更培養了我用系統化思維解決復雜問題的能力,為后續軟件開發學習奠定了堅實基礎。

      posted @ 2025-06-22 21:49  存默  閱讀(11)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 网友偷拍视频一区二区三区| 亚洲欧洲日产国码无码久久99 | 日本一区二区三区四区黄色| 高清国产av一区二区三区| 人妻少妇看a偷人无码| 峡江县| 狼色精品人妻在线视频| 国产一区二区高清不卡| 日韩av一区二区精品不卡| 国产精品白浆免费视频| 成人国产一区二区三区精品| 日韩伦人妻无码| 亚洲日本韩国欧美云霸高清| 免费人成在线观看网站| 国产青榴视频在线观看| 国产精品多p对白交换绿帽| 亚洲午夜av一区二区| 亚洲成人av在线资源| 久久精品国产精品亚洲蜜月| 九九热精品在线视频观看| 四虎精品永久在线视频| 国产精品538一区二区在线| 国产精品粉嫩嫩在线观看| 成人免费乱码大片a毛片| 国产精品久久国产精品99 gif| 毛葺葺老太做受视频| 欧美日韩精品一区二区视频| 国产欧美精品区一区二区三区| 国产午夜亚洲精品福利| 中文字幕av无码不卡| 亚洲欧美一区二区三区在线| 日本亚洲一区二区精品久久| 日韩中文字幕精品人妻| 成年男女免费视频网站| 国产精品一二三区蜜臀av| 午夜福利在线观看6080| 大竹县| 国产偷自视频区视频| 亚洲AV午夜电影在线观看| 国产对白老熟女正在播放| 婷婷综合亚洲|