当前位置: 首页 > news >正文

第03周 预习、实验与作业:面向对象入门2与类的识别

集美大学课程实验报告-第03周 预习、实验与作业:面向对象入门2与类的识别

项目名称 内容
课程名称 数据结构
班级 网安2413
指导教师 郑如滨
学生姓名 林沁茹
学号 202421336067
实验项目名称 第03周 预习、实验与作业:面向对象入门2与类的识别
上机实践日期
上机实践时间 2学时

一、目的(本次实验所涉及并要求掌握的知识点)

  • 重点:掌握pivate、public关键字的用途及其与setter/getter模式和封装性之间的关系。
  • 理解static属性与static方法的用途。
  • 掌握使用初始化块初始类的方法。掌握初始化块与静态初始化块的区别。
  • 掌握使用package管理类。
  • 重点:学会识别问题中的类并定义解决问题所需要的类。
  • 初步了解Java编程规范。

二、课前问题解答

题目1—什么样的方法应该用static修饰?不用static修饰的方法往往具有什么特性?Student的getName应该用static修饰吗?

1. static意味着“静态的”或“属于类的”。当一个方法被static修饰后,它就不再属于任何一个具体的对象实例,而是直接属于类本身。
2. 当一个方法没有static修饰时,它被称为实例方法。它代表了对象的行为,并且与对象的状态紧密相关。
3. 不能,getName是为了获得特定的学生的名字,而不是整个类共有的相同名字。

题目2—购物车案例中,使用了什么方法将问题描述中的类、方法、属性找出来?方法与属性到底属于哪个类,要怎么判定呢?

1.名词-动词分析法,根据需求写出代码
2.同一类的方法和属性封装在一起

题目3—一个项目中有很多类。怎样才能避免你项目中的类与别人编写的类同名呢?项目中类各种各样要怎么管理这些代码呢?举例说明。

1.使用包来区分分类
2.
(1)按功能分包,例如:Controller包,Service包等
(2)按层分包(分层架构),例如:四层结构(表示层、应用程序层、领域层、基础设施层),三层结构(显示层(UI层)、业务逻辑层(BLL)、数据访问层(DAL)),SSH框架(域模块层、数据持久化层、业务逻辑层、页面表示层)
(3)使用 Maven/Gradle 管理依赖
例如:Maven 项目结构示例
my-project/
├── pom.xml          // 项目配置文件
├── src/
│   ├── main/
│   │   ├── java/    // Java 源代码
│   │   └── resources/ // 配置文件
│   └── test/
│       ├── java/    // 测试代码
│       └── resources/ // 测试资源(4)使用模块化
例如:模块化项目结构
my-project/
├── cart-module/
│   ├── src/
│   │   └── module-info.java
│   └── com/example/cart/
├── payment-module/
│   ├── src/
│   │   └── module-info.java
│   └── com/example/payment/

题目4—阅读《阿里巴巴Java开发手册 终极版(1.3.0)》,写出至少7条Java编程规范。应包含如下几个方面:

变量命名、类命名、方法命名、常量命名、包命名、代码格式、OOP规约。

1.代码格式

  • 杜绝完全不规范的缩写,避免望文不知义。
  • 为了达到代码自解释的目标,任何自定义编程元素在命名时,使用尽量完整的单词组合来表达其意
  • 如果模块、接口、类、方法使用了设计模式,在命名时体现出具体模式
  • 大括号的使用约定。如果是大括号内为空,则简洁地写成{}即可,不需要换行;如果是非空代码块则
  • 左小括号和字符之间不出现空格;同样,右小括号和字符之间也不出现空格
  • if/for/while/switch/do 等保留字与括号之间都必须加空格
  • 任何二目、三目运算符的左右两边都需要加一个空格
  • 采用 4 个空格缩进,禁止使用 tab 字符
  • 注释的双斜线与注释内容之间有且仅有一个空格
  • 单行字符数限制不超过 120 个,超出需要换行,换行时遵循如下原则:
    1) 第二行相对第一行缩进 4 个空格,从第三行开始,不再继续缩进
    2) 运算符与下文一起换行。
    3) 方法调用的点符号与下文一起换行。
    4) 方法调用时,多个参数,需要换行时,在逗号后进行。
    5) 在括号前不要换行
  • 方法参数在定义和传入时,多个参数逗号后边必须加空格
  • IDE 的 text file encoding 设置为 UTF-8; IDE 中文件的换行符使用 Unix 格式,不要使用 Windows 格式

2.变量命名

  • 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束
  • 代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式(国际通用的名称,可视同英文)
  • 中括号是数组类型的一部分,数组定义如下:String[] args
  • POJO 类中布尔类型的变量,都不要加 is,否则部分框架解析会引起序列化错误。反例:定义为基本数据类型 Boolean isDeleted;的属性,它的方法也是 isDeleted(),RPC框架在反向解析的时候,“以为”对应的属性名称是 deleted,导致属性获取不到,进而抛出异

3.类命名

  • 类名使用 UpperCamelCase 风格,必须遵从驼峰形式(单词连写,不使用空格或下划线,每个单词的首字母大写或小写,以区分单词边界),但以下情形例外:DO / BO / DTO / VO / AO
  • 抽象类命名使用 Abstract 或 Base 开头;异常类命名使用 Exception 结尾;测试类命名以它要测试的类的名称开始,以 Test 结尾。

4.方法命名

  • 方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵从驼峰形式

5.常量命名

  • 常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长

6.常量命名

  • 不允许任何魔法值(即未经定义的常量)直接出现在代码中
  • long 或者 Long 初始赋值时,使用大写的 L,不能是小写的 l,小写容易跟数字 1 混
    淆,造成误解
  • 不要使用一个常量类维护所有常量,按常量功能进行归类,分开维护
  • 如果变量值仅在一个范围内变化,且带有名称之外的延伸属性,定义为枚举类。下面
    正例中的数字就是延伸信息,表示星期几

7.包命名

  • 包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。

8.OOP规约

  • 避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成
    本,直接用类名来访问即可
  • 所有的覆写方法,必须加@Override 注解
  • 相同参数类型,相同业务含义,才可以使用 Java 的可变参数,避免使用 Object(可变参数必须放置在参数列表的最后)
  • 外部正在调用或者二方库依赖的接口,不允许修改方法签名,避免对接口调用方产生影响。接口过时必须加@Deprecated 注解,并清晰地说明采用的新接口或者新服务是什么
  • 不能使用过时的类或方法*
  • Object 的 equals 方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals
  • 所有的相同类型的包装类对象之间值的比较,全部使用 equals 方法比较
  • 关于基本数据类型与包装数据类型的使用标准如下:
    1) 【强制】所有的 POJO 类属性必须使用包装数据类型。
    2) 【强制】RPC 方法的返回值和参数必须使用包装数据类型。
    3) 【推荐】所有的局部变量使用基本数据类型。
  • 定义 DO/DTO/VO 等 POJO 类时,不要设定任何属性默认值
  • 序列化类新增属性时,请不要修改 serialVersionUID 字段,避免反序列失败;如果完全不兼容升级,避免反序列化混乱,那么请修改 serialVersionUID 值
  • 构造方法里面禁止加入任何业务逻辑,如果有初始化逻辑,请放在 init 方法中
  • POJO 类必须写 toString 方法。使用 IDE 的中工具:source> generate toString时,如果继承了另一个 POJO 类,注意在前面加一下 super.toString*

三、实验使用环境(本次实验所使用的平台和相关软件)

以下请根据实际情况编写

  • 操作系统:Windows 11专业版
  • 编程语言:Java
  • 开发工具:[eclipse)

四、附件-参考文件

购物车案例

Commodity.java

点击查看代码
package shopping;/*** 商品类:用来存放商品的信息(商品名称name、商品价格price)。* 该类有待完善。比如,未包含能唯一标识商品的商品编号属性。*/
public class Commodity {private String name;private double price;public Commodity(String name, double price) {this.name = name;this.price = price;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}}

ShoppingCart.java

点击查看代码
package shopping;import java.util.ArrayList;/*** 购物车类:可以用来存放商品,且包含购物车常用的操作方法。* 该类有待完善。未包含清空购物车、删除某件商品、修改某件商品的数量等方法。*/
public class ShoppingCart {private ArrayList<Commodity> items = new ArrayList<>();//存放商品的容器/*** 往购物车里面存放商品。* 该方法还不完善,未能将相同商品归为一项。你能修改完善吗?* 怎么能获得某件商品的数量?* @param item*/public void add(Commodity item) {items.add(item);}/*** 获得购物车内商品的数量* @return 购物车内商品的数量*/public int getQty() {return items.size();}/*** 结算* @return 返回购物车中所有商品的总价*/public double checkout() {double x = 0;for (Commodity commodity : items) {x += commodity.getPrice();}return x;}/*** 显示购物车中的商品*/public void show() {for (Commodity commodity : items) {printCommodity(commodity);System.out.println();}}private void printCommodity(Commodity commodity) {System.out.printf("name: %s, price: %f", commodity.getName(), commodity.getPrice());}}

Main.java

点击查看代码
package shopping;public class Main {public static void main(String[] args) {Commodity c1 = new Commodity("苹果", 10.5);Commodity c2 = new Commodity("苹果", 10.5);Commodity c3 = new Commodity("手机", 25.99);Commodity c4 = new Commodity("Java教程", 8.88);ShoppingCart cart = new ShoppingCart();cart.add(c1);cart.add(c2);cart.add(c3);cart.add(c4);double x = cart.checkout();cart.show();System.out.println("数量"+cart.getQty());System.out.println("总价:"+x);}}
http://www.wxhsa.cn/company.asp?id=6127

相关文章:

  • 第8篇、Kafka 监控与调优实战指南
  • linux系统编程02-进程基本知识
  • linux系统编程03-并发:信号
  • linux系统编程04-并发:线程
  • 新手高效制作PPT的3个步骤:告别逻辑混乱,从构思到完成!
  • Avalonia:用 ReactiveUI 的方法绑定数据、事件和命令
  • 【pyQT 专栏】程序设置 windows 任务栏缩略图(.ico)教程
  • Say 题选记(9.14 - 9.20)
  • vm的配置
  • 力扣72题 编辑距离
  • 数学基本结构框架
  • 2025.9.16总结
  • 在 Tailscale 中禁用 DNS
  • 软件工程实践一:Git 使用教程(含分支与 Gitee)
  • 【青少年低空飞行玩意】设计图以及项目概况
  • C++ 多态
  • Python实现对比两个Excel表某个范围的内容并提取出差异
  • 我用AI给自己做了一整套专属表情包!攻略
  • 20250916 之所思 - 人生如梦
  • Vue3项目开发专题精讲【左扬精讲】—— 在线教育网站系统(基于 Vue3+TypeScript+Vite 的在线教育网站系统系统设计与实现)
  • 20250915
  • Python Socket网络编程(4)
  • 今日学习 dos命令和Java基础语法
  • Photoshop 2025 v26.0软件下载免费版安装教程(含 Photoshop 软件一键安装包免费下载渠道)
  • 课前问题列表
  • switch中初始化变量
  • office2024免费永久激活安装包下载安装教程包含(下载安装配置激活)
  • vue2和vue3一时转不过来
  • 怎么查询电脑的登录记录及密码更改情况? - Li
  • C语言结构体中的内存对齐