面向对象课程总结

前言
在本学期的 Java 面向对象程序设计课程学习中,丰富多样的教学环节构成了充实而富有挑战的学习之旅。课程采用线上线下结合,搭配 PTA 作业、实验与 Blog 的模式,助力我们系统地掌握面向对象编程的核心思想与技术实现,尽管整体课程工作量大,需投入大量时间精力,但收获颇丰。
面向对象技术总结
本学期通过面向对象课程学到了面向对象的六大设计原则(SRP,OCP,LSP,DIP,CRP,LOD),课程核心内容 封装,继承,多态,抽象类,接口,集合框架,异常,以及翻转课堂的JavafX。无论是老师还是同学们的授课,都让我学到了很多知识,明白了自己的不足。
一、封装
封装作为面向对象的基础原则,能提高代码的安全性和可维护性。其核心就是将属性和方法封装在一个类中,通过访问修饰符(private、protected、public)控制外部对内部成员的访问,这样一来就提高代码的安全性。
示例:

public class Student{
    private String name;
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

用private来修饰属性,外界无法直接访问,只能通过get(),set()方法,从而提高代码的安全性。
二、继承
继承是面向对象编程中实现代码复用和构建类层次结构的核心机制。其主要用法就是子类继承父类的属性和方法,并在子类中重写父类的方法。通过继承,我们可以减少代码的重复,提高代码的可维护性和扩展性。
示例:

abstract class Shape {

    public abstract double calculateArea();
   
    public abstract double calculatePerimeter();
    
    public String getShapeName() {
        return this.getClass().getSimpleName();
    }
}
class Circle extends Shape {
    private double radius;
    public Circle(double radius) {
        this.radius = radius;
    }
    
    @Override
    public double calculateArea() {
        return Math.PI * radius * radius;
    }
    
    @Override
    public double calculatePerimeter() {
        return 2 * Math.PI * radius;
    }
    
    public double getRadius() {
        return radius;
    }
}

子类Circle继承了父类Shape的calculateArea()和calculatePerimeter()方法,实现父类方法的重写,减少代码的重复,提高代码的可维护性和扩展性。
三、多态
多态是面向对象编程的一项核心特性。主要通过接口和方法重写来实现,多态的应用可以提高代码的灵活性和可扩展性,使我们的程序更加易于维护和扩展。
示例(接口):

interface Shape {
    double area();
}

class Circle implements Shape {
    private double radius;
    public Circle(double radius) { this.radius = radius; }
    @Override
    public double area() { return Math.PI * radius * radius; }
}

class Rectangle implements Shape {
    private double width, height;
    public Rectangle(double width, double height) {
        this.width = width;
        this.height = height;
    }
    @Override
    public double area() { return width * height; }
}

Circle和Rectangle实现了Shape的接口,同时Shape的抽象方法area()被Circle和Rectangle实现了,使得程序更加易于维护和扩展。
四、抽象类和接口
抽象类:一种不能被实例化的类,旨在为子类提供公共的属性和方法定义,其中可以包含抽象方法和具体方法。
接口:一种特殊的抽象类型,仅包含方法签名和常量定义,不包含方法的实现。类通过实现接口来承诺提供接口中定义的所有方法。
示例:

抽象类:
abstract class Shape {

    public abstract double calculateArea();
   
    public abstract double calculatePerimeter();
    
    public String getShapeName() {
        return this.getClass().getSimpleName();
    }
}
class Circle extends Shape {
    private double radius;
    public Circle(double radius) {
        this.radius = radius;
    }
    
    @Override
    public double calculateArea() {
        return Math.PI * radius * radius;
    }
    
    @Override
    public double calculatePerimeter() {
        return 2 * Math.PI * radius;
    }
    
    public double getRadius() {
        return radius;
    }
接口:
interface Shape {
    double area();
}

class Circle implements Shape {
    private double radius;
    public Circle(double radius) { this.radius = radius; }
    @Override
    public double area() { return Math.PI * radius * radius; }
}

抽象类中有着抽象方法calculateArea()和calculatePerimeter(),同时也有具体方法getShapeName()。
接口中有着抽象方法area(),同时Shape的抽象方法area()被Circle实现了。
五、集合框架
集合框架是一种用于表示和操作集合的数据结构体系,在PTA作业和实验中,我学会了如何使用集合框架来存储和管理数据。
示例:

import java.util.ArrayList;
import java.util.List;
public class Main{
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("apple");
        list.add("banana");
        list.add("cherry");
        System.out.println(list.get(1));
    }
}

通过list的add()方法将数据存储起来,同时也可以对数据进行处理。
六、异常处理
异常处理是一种机制,它能够对程序运行时出现的异常状况进行有效管理。借助这种机制,程序可以对错误进行捕获、处理,从而避免程序崩溃,增强程序的健壮性。
示例:

public class Main{
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};
        int index = 10; 
        try {
            System.out.println("数组索引 " + index + " 的值是: " + numbers[index]);
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("错误: 数组索引越界!");
            System.out.println("有效索引范围是 0 到 " + (numbers.length - 1));
            System.out.println("异常信息: " + e.getMessage());
        } finally {
            System.out.println("程序执行结束");
        }
    }
}

这个例子展示了如何处理常见的运行时异常,帮助程序在出现错误时能优雅地处理而不是崩溃。
七、JavaFX
JavaFX 是一个用于构建富客户端应用程序的 Java 库,它为开发人员提供了创建具有现代图形界面的应用程序所需的工具和组件。
在学习JavaFX时,通过翻转课堂让我对自己负责的部分更加熟悉。
示例:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) {
        Button btn = new Button();
        btn.setText("点击我");
        btn.setOnAction(event -> System.out.println("Hello World!"));
        StackPane root = new StackPane();
        root.getChildren().add(btn);
        Scene scene = new Scene(root, 300, 250);
        primaryStage.setTitle("JavaFX 示例");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

这是一个使用 JavaFX 创建简单窗口的示例,也是JavaFX学习的基础,此外通过学习JavaFX,为今后的学习和开发打下了基础。
学会了将职责拆分到不同类中,以降低类的复杂性。
八、六大设计原则
SRP(单一职责): 单一职责原则强调一个类应该只有一个引起它变化的原因。即一个类只负责一项职责,避免将过多功能耦合在一起。在学习过程中,学会了将职责拆分到不同类中,以降低类的复杂性。
OCP(开闭原则): 软件实体应该对扩展开放,对修改关闭。通过抽象和多态机制,可以在不修改原有代码的情况下添加新功能。
LSP(里氏替换原则): 子类对象必须能够替换掉它们的父类对象。即子类应当继承父类的行为,并且不改变父类原有的行为语义,否则会破坏继承体系的一致性。
ISP(接口隔离): 抽象不应该依赖细节,细节应该依赖抽象。通过依赖接口而非具体实现,可以降低模块间的耦合度。
LOD(迪米特法则): 尽量使用对象组合或聚合,而不是继承关系达到复用的目的。组合比继承具有更好的灵活性和可维护性,能避免继承带来的耦合问题。
CRP(依赖倒置原则): 又称 “最少知识原则”,一个对象应该对其他对象有最少的了解。即一个类应该只和它的直接朋友通信,避免与陌生对象发生直接交互,降低系统的耦合度。
总结: 通过学习面向对象技术(以封装、继承、多态为核心),结合抽象类、接口、集合框架及异常处理构建代码架构,进一步理解了软件工程的设计思想。将设计原则(如 SRP、OCP 等)与技术实践结合开发项目时,深刻体会到合理架构对代码可维护性与扩展性的重要性,而程序成功运行的成就感更激发了对技术探索的热情。未来仍需持续学习,在实践中深化对面向对象思想与软件工程方法论的理解,提升项目设计与实现能力。
踩坑心得
1.在刚开始学习Java的时候,有的题目没有类图,然后有没有训练过,那么可能就会在设计类和对象时出现设计不合理的情况。通过不断学习和实践,我逐渐理解了面向对象思想的重要性,并学会了如何运用面向对象的思想来设计合理的类层次结构。
2.必要的代码注释非常重要。在不断的题目练习后,难免会忘记自己前面所写的,如果没有代码注释,可能需要重新看,或者根本不知道这么写的,这是血一样的代价,或许只有亲身体验才能明白吧。
3.没必要自己死磕到底,可以问问同学和老师,毕竟当局者迷,同时编程是一个需要不断实践和学习的过程,遇到困难是正常的。关键是要建立有效的学习方法和求助渠道,这样才能不断提升自己的编程能力。
改进建议和总结
一、总结: 这一学期的面向对象课程学习充满探索的艰辛与突破的喜悦。总结上来说,这节课让我受益匪浅,也大大的激发了我对于后续学习的期待。
二、建议: 希望实验提交系统改好一点,实验没有必要采用迭代模式,同时希望老师上课幽默一点,不然很容易犯困。
最后要感谢段老师这一学期辛勤的教导和辛苦的付出!!!

posted @ 2025-06-22 15:55  金军洋  阅读(14)  评论(0)    收藏  举报