第03周 面向对象入门2与类的识别

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

在Java中,static修饰符用于定义类级别的成员(变量或方法),而不是实例级别的成员。

应该使用static修饰的方法:

  1. 不依赖于实例状态:如果方法的行为不依赖于类的实例变量(即它不使用this关键字),则可以将其定义为static
  2. 工具方法:常用于提供工具或帮助功能,例如数学计算(如Math类中的方法)。
  3. 工厂方法:用于创建类的实例,而不是通过构造函数。
  4. 共享数据:如果方法需要访问或修改类级别的共享数据(static变量),则应使用static
     

不用static修饰的方法的特性:

  1. 依赖于实例状态:这些方法通常需要访问实例变量或其他实例方法,使用this关键字。
  2. 多态性非静态方法可以被子类重写,支持多态性。
  3. 实例特定行为:它们通常与特定实例的状态和行为相关联。
     

Student的getName不应该用static修饰

如果getName方法是用来返回学生实例的名字,它是一个实例方法,以便能够访问特定学生对象的状态,并且它依赖于实例变量(例如,name),那么它不应该被声明为static

public class Student {  
    private String name;  

    public Student(String name) {  
        this.name = name;  
    }  

    public String getName() {  
        return name; // 依赖于实例变量  
    }  
}

在这个例子中,getName方法不应该是static,因为它需要访问每个Student实例的name属性。

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

在设计购物车案例时通过京东APP购物的过程,将问题描述中的类、方法和属性找出来:

  • 首先,先从需求中识别出主要的对象,这些实体通常会转化为。例如,在购物车案例中,可能会有以下实体:用户(User),商品(Product),购物车(ShoppingCart),订单(Order)
  • 其次,对于每个对象的特征或状态,这些特征通常会转化为类的属性。例如:
    • User类可能有属性:usernamepasswordemail
    • Product类可能有属性:productIdnamepricequantity
    • ShoppingCart类可能有属性:items(购物车中的商品列表)。
  • 最后,根据购物车所需要的功能制定出相对应的方法。例如:
    • User类可能有方法:login()register()
    • Product类可能有方法:getDetails()updateStock()
    • ShoppingCart类可能有方法:addItem(Product product)removeItem(Product product)checkout()

类的区别与判定

  • 属性归属:属性通常与类的特征相关联。判断一个属性属于哪个类,可以考虑该属性描述的是哪个实体的特征。
  • 方法归属:方法通常与类的行为相关联。判断一个方法属于哪个类,可以考虑该方法实现的功能是与哪个实体的行为相关。

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

如何避免项目中的类与别人编写的类同名

 1. 使用命名空间或包:(package)
   - 将类组织到不同的命名空间或包中,可以有效避免类名冲突。每个包可以代表一个功能模块或业务领域。
   - 例如,在Java中,可以使用包名来组织类

     package com.example.ecommerce.user; // 用户相关类
     public class User {
         // 用户类的实现
     }

     package com.example.ecommerce.product; // 商品相关类
     public class Product {
         // 商品类的实现
     }

2. **使用前缀或后缀**:
   - 在类名中添加前缀或后缀,以指明类的功能或所属模块。例如:
     - `UserService`:表示与用户相关的服务类。
     - `ProductRepository`:表示与商品数据访问相关的类。

 3. **遵循命名约定**:
   - 采用一致的命名约定,例如用驼峰命名法或下划线命名法,并确保团队成员遵循约定。
   - 例如,所有的服务类以`Service`结尾,所有的控制器类以`Controller`结尾。

 4. **模块化设计**:
   - 将项目分成多个模块,每个模块负责特定的功能。每个模块可以有自己的命名空间,减少类名冲突的可能性。
   - 例如,一个电商项目可以分为以下模块:
     - 用户模块(User Module)
     - 商品模块(Product Module)
     - 订单模块(Order Module)

5. **使用版本控制系统**:
 使用Git等版本控制系统来管理代码,确保不同开发者在不同分支上工作,减少合并时的冲突。

示例:
假设你正在开发一个电商平台,项目结构可以如下:


src/
├── com/
│   └── example/
│       └── ecommerce/
│           ├── user/
│           │   ├── User.java
│           │   ├── UserService.java
│           │   └── UserController.java
│           ├── product/
│           │   ├── Product.java
│           │   ├── ProductService.java
│           │   └── ProductController.java
│           └── order/
│               ├── Order.java
│               ├── OrderService.java
│               └── OrderController.java

在这个结构中,类被组织在不同的包中,避免了类名冲突。同时,类名清晰地表明了它们的功能和所属模块,便于管理和维护。


项目中类各种各样要怎么管理这些代码呢?

在项目中管理各种类的代码可以通过以下几种方法来实现:

1. **模块化设计**:将代码分成多个模块,每个模块负责特定的功能。这样可以提高代码的可维护性和可重用性。

2. **命名规范**:使用一致的命名规范来命名类、方法和变量,使代码更易于理解。例如,可以使用驼峰命名法来命名类。

3. **目录结构**:建立清晰的目录结构,将相关的类和模块放在一起。例如,可以按功能或模块划分文件夹。

4. **文档注释**:为每个类和方法添加文档注释,说明其功能、参数和返回值。这有助于其他开发者理解代码。

5. **版本控制**:使用版本控制系统(如Git)来管理代码的版本,跟踪更改历史,便于协作开发。

6. **代码审查**:定期进行代码审查,确保代码质量和一致性,及时发现和修复问题。

7. **单元测试**:为关键类和方法编写单元测试,确保代码的正确性和稳定性。

8. **依赖管理**:使用依赖管理工具(如npm、pip等)来管理项目的外部依赖,确保版本一致性。

通过以上方法,可以有效地管理项目中的各种类代码,提高开发效率和代码质量。
 

阅读《阿里巴巴Java开发手册 终极版(1.3.0)》,写出至少7条Java编程规范。应包含如下几个方面:变量命名、类命名、方法命名、常量命名、包命名、代码格式、OOP规约。

1. 变量命名
- **遵循驼峰命名法**:变量名应以小写字母开头,后续单词的首字母大写,例如:`userName`、`accountBalance`。
- **有意义的名称**:变量名应该清晰描述其用途和内容,避免使用模糊或不明确的名称。例子:使用 `firstName` 而不是 `fn`。

2. 类命名
- **使用大写字母开头的驼峰命名法**:类名应该使用大写字母开头并采用驼峰命名法,例如:`EmployeeManager`、`OrderService`。
- **名词或名词短语**:类名应该为名词或名词短语,以表示其所表示的实体,例如:`UserProfile`、`ProductCatalog`。

 3. 方法命名
- **使用小写字母开头的驼峰命名法**:方法名应以小写字母开头,后续单词的首字母大写,例如:`calculateTotal`、`getUserInfo`。
- **动词或动词短语**:方法名应以动词或动词短语形式表示其行为,例如:`updateInventory()`、`fetchData()`。

 4. 常量命名
- **全大写加下划线命名法**:常量名应该使用全大写字母,并用下划线分隔单词,例如:`MAX_HEIGHT`、`DEFAULT_TIMEOUT`。
- **描述性名称**:名称应清晰表达常量所代表的意义,避免使用过于简短的名称。

5. 包命名
- **使用小写字母**:包名应使用全小写字母,避免使用下划线或其他特殊字符,例如:`com.example.project`。
- **反向域名模式**:包名应遵循反向域名的命名规则,以唯一标识公司和项目,例如:`com.alibaba.ecommerce`。

6. 代码格式
- **一致的缩进**:使用统一的缩进风格(通常是4个空格或一个Tab),而不是混合使用缩进方式。
- **每行不超过120字符**:保持每行代码在120字符以内,以提高可读性。长行应适当地分行。

 7. OOP规约
- **优先使用接口而非抽象类**:在面向对象设计中,优先使用接口来实现多态性,便于替换和扩展。
- **遵循单一职责原则**:每个类或模块应当只承担一种职责,避免类过于复杂,从而提高代码的可维护性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值