Javase学习文档------面象对象初探

news/2025/2/12 3:42:32/

引入面向对象

面向对象的由来:
面向对象编程(Object-Oriented Programming, OOP)是一种编程范型,其由来可以追溯到20世纪60年代。在此之前,主流编程语言采用的是“过程化编程”模式,即面向过程编程模式。在这种模式下,程序主要由一组函数或子程序组成,数据和函数是分离的。
然而随着软件规模和复杂性的增加,过程化编程的不足逐渐显现:必须通过全局变量或输入参数来传递信息、代码复用困难、代码难以维护等问题。为了解决这些问题,人们开始寻求一种新的编程范型。
在此背景下,Alan Kay等人提出了面向对象编程这一概念,提供了一种新的软件设计和实现方法,从而被广泛应用于软件开发中。面向对象编程将数据和函数封装为对象,强调数据的本质和操作数据的行为作为一体,多态、继承等特性可以让我们更加灵活地设计、组织、重用和维护程序。
到20世纪80年代,面向对象编程得到了广泛的推广和应用,C++、Java、Python等编程语言都具有良好的面向对象支持。
综上所述,面向对象编程是为了解决过程化编程的不足和应用需求而产生的一种新的编程思想和技术,已经成为现代软件开发的重要组成部分。

这不禁想对比一下,面向对象VS面向过程
面向过程和面向对象都是对软件分析、设计和开发的一种思想,它指导着人们以不同的方式去分析、设计
和开发软件。早期先有面向过程思想,随着软件规模的扩大,问题复杂性的提高,面向过程的弊端越来
越明显的显示出来,出现了面向对象思想并成为目前主流的方式。两者都贯穿于软件分析、设计和开发
各个阶段,对应面向对象就分别称为面向对象分析(OOA)、面向对象设计(OOD)和面向对象编程
(OOP)。C语言是一种典型的面向过程语言,Java是一种典型的面向对象语言。
总结一下,异同点如下:

异同点

如何new对象
在Java中,我们可以通过关键字new来创建一个对象。具体步骤如下:
使用关键字new创建一个对象引用,该对象的类型是我们所需创建的类的类名。
例如:Student student1;
在新建对象引用后,需要使用关键字new调用类的构造方法,创建该对象实例。在括号中传入构造方法需要的参数。
例如:student1 = new Student(“001”, “Tom”, “男”, 20, 80.5);
上述代码将创建一个学生对象,并将此对象的sNO、sName、sSex、sAge、sJava属性分别初始化为"001"、“Tom”、“男”、20和80.5。

 Student() students = new Student();

例题

请定义一个交通工具(Vehicle)的类其中有: 属性: 速度(speed)、 体积(size)等,方法:移动(move())、设置速度(setSpeed(int speed))、加速 speedUp()、减速 speedDown()等。最后在测试类 Vehicle 中的 main()中实例化一个交通工具对象并通过方法给它初始化 speed,size 的值并且通过打印出来。另外调用加速、减速的方法对速度进行改变

public class Vehicle {//Vehicle实体类int speed; // 速度int size; // 体积public void move() {System.out.println("Vehicle is moving.");}public void setSpeed(int speed) {this.speed = speed;}public void speedUp() {speed += 10;}public void speedDown() {speed -= 10;}
}
public class TestVehicle {//测试类TestVehiclepublic static void main(String[] args) {Vehicle v = new Vehicle(); // 创建交通工具对象v.setSpeed(60); // 设置速度为60v.size = 3; // 设置体积为3System.out.println("Speed: " + v.speed);System.out.println("Size: " + v.size);v.speedUp(); // 加速System.out.println("New speed after speeding up: " + v.speed);v.speedDown(); // 减速System.out.println("New speed after speeding down: " + v.speed);}
}

总结

在使用面向对象的思想进行程序设计时,有一些需要特别注意的点,包括以下几个方面:

面向对象的三大特征:封装、继承和多态。在设计类时,需要考虑这些特征的应用,同时遵循单一职责原则,使类的功能更加清晰和简洁。
对象的生命周期。在Java中,对象创建后会一直存在于内存中,直到垃圾回收器回收其占用的内存。因此,在使用对象时要注意对象的生命周期,及时对不再使用的对象进行置空或释放内存。

对象之间的关系。在设计类时,需要考虑类之间的关系,包括依赖关联聚合和组合等。同时,还需注意避免出现过度耦合的情况,遵循迪米特法则,确保类与类之间的独立性。

代码的可维护性。在编写代码时,需要注意代码的可读性、可复用性、可扩展性和可测试性等方面,以确保代码的可维护性。同时,还需注意代码的规范性和风格的统一性,使其他人更易于理解和修改代码。

异常处理。在程序运行中,可能会发生各种异常情况,如空指针异常、数组越界异常等。因此,在编写代码时,需要考虑这些异常情况,并进行相应的异常处理,以保证程序的稳定性和可靠性。

综上所述,面向对象的程序设计需要在多个方面进行注意,包括类的设计、对象的生命周期、对象之间的关系、代码的可维护性和异常处理等。只有在这些方面都做到了充分考虑并合理处理,才能编写出高质量、易维护的面向对象程序。

补充

构造方法

何为构造方法、构造方法的用法与细节

解答1. 构造方法的名称必须与类名相同。2. 构造方法可以有参数,也可以没有参数。3. 构造方法没有返回值类型,也不需要显式地写出 return

构造方法的创建

无参构造
public class Person {private String name;private int age;//无参构造方法public Person() {}
}
有参构造
public class Person {private String name;private int age;// 有参构造方法public Person(String name, int age) {this.name = name;this.age = age;}
}
无参和有参构造
public class Person {private String name;private int age;//无参构造方法public Person() {}// 有参构造方法public Person(String name, int age) {this.name = name;this.age = age;}
}

http://www.ppmy.cn/news/39582.html

相关文章

Matlab与ROS(1/2)---服务端和客户端数据通信(五)

0. 简介 在前几讲我们讲了Matlab中的Message以及Topic的相关知识。而ROS主要支持的通信机制还有服务这一类。服务通过允许请求以及响应的通信方式,来给整个系统完成更紧密的耦合。服务客户端向服务服务器发送请求消息并等待响应。服务器将使用请求中的数据构造响应…

帮小忙(网站)

首先,网站的工具超级丰富,涵盖面好广,包含有图片类工具,数据换算,生活娱乐,教育,文本工具,开发工具,文档转换,视频,PDF转换工具等等9个大类&#…

SpringBoot创建和使用

目录 什么是SpringBoot SpringBoot的优点 SpringBoot项目的创建 1、使用idea创建 2、项目目录介绍和运行 Spring Boot配置文件 1、配置文件 2、配置文件的格式 3、properties 3.1、properties基本语法 3.2、读取配置文件 3.3、缺点 4、yml 4.1、优点 4.2、yml基本…

研究的艺术 (The craft of research) 读书笔记

前言 如果你对这篇文章感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。 对于研究者而言,写作是一件很重要的事,好的写作不仅能让更多人愿意读,获得更大影响力&…

lodash-es 工具库

数字化管理平台 Vue3ViteVueRouterPiniaAxiosElementPlus Vue权限系统案例 个人博客地址 Lodash中文文档 Lodash 是一个一致性、模块化、高性能的 JavaScript 实用工具库,算是从 Underscore 分离出来的超集。 Lodash 通过降低 array、number、objects、string 等…

Debezium报错处理系列之五十七:Can‘t compare binlog filenames with different base names

Debezium报错处理系列之五十七:Cant compare binlog filenames with different base names 一、完整报错二、错误原因三、解决方法Debezium报错处理系列一:The db history topic is missing. Debezium报错处理系列二:Make sure that the same history topic isn‘t shared b…

Redis篇之Redis事务

Redis事务 Redis事务的本质是一组命令的集合 一个事务中所有命令会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。 事务执行三阶段: 开启:以 MULTI 开始一个事务 入队:将多个命令入队…

基础练习 十进制转十六进制

number int(input()) hex_num hex(number) print(hex_num[2:].upper())