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

一.课前问题列表

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

  • 工具方法:如果某个方法不依赖于类的实例状态(即不需要访问类的非静态成员变量),并且其主要目的是提供某种通用的、不依赖于实例的功能,那么这个方法应该是静态的。例如,数学工具类中的计算方法。

  • 常量访问:当方法用于返回类的常量或静态变量的值时,将其声明为静态可以使得调用更加直观和方便。

  • 工厂方法:静态方法有时用于创建类的实例,这种方法被称为工厂方法。这些方法根据提供的参数返回类的实例,但不依赖于任何实例状态。

  • 不用static修饰的方法往往具有什么特性?

  • 依赖于实例状态:这些方法需要访问类的非静态成员变量,即它们的行为可能因实例的不同而有所不同。
  • 实例特定操作:这些方法执行的操作是针对类的特定实例的,如修改实例的状态或根据实例的状态执行操作。
  • StudentgetName方法应该用static修饰吗?

    不应该StudentgetName方法通常用于获取学生的名字,这是一个与Student实例紧密相关的操作。每个学生的名字可能都是不同的,这意味着getName方法需要访问每个学生实例的名字字段(通常是一个非静态成员变量)。由于static方法不依赖于类的任何特定实例,因此如果getName是静态的,它将无法访问或返回特定实例的名字。因此,getName方法应该是非静态的,以便能够访问和操作实例的状态。

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

  • User(用户)
  • Product(商品)
  • Cart(购物车)
  • CartItem(购物车项,表示购物车中的商品及其数量)
  • 确定类的属性

    每个类都会有一些属性来描述其状态或特征。属性是类的数据成员,用于存储类的实例的特定信息。例如:

  • User类包含idusernameemail等属性。
  • Product类可能包含idnamepricedescription等属性。
  • Cart类可能包含iduserId(表示购物车属于哪个用户)、items(一个列表,包含购物车项)等属性。
  • CartItem类包含productIdquantity等属性。
  • 确定类的方法

  • User类包含loginlogoutgetProfile
  • Product类包含getPricegetDescription
  • Cart类包含addItem(向购物车添加商品)、removeItem(从购物车移除商品)、getTotalPrice(计算购物车总价)等方法。
  • CartItem类包含updateQuantity(更新商品数量)方法。
  • 判定方法与属性所属的类

  • 属性:属性通常与类的状态或特征直接相关。如果某个数据项是描述某个类实例的,那么它应该作为该类的属性。
  • 方法:方法应该根据它们执行的操作或行为来确定所属的类。如果某个操作是某个类特有的,或者需要访问或修改该类的状态,那么它应该作为该类的方法。

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

  • 1. 命名规范

  • 使用命名空间(Namespaces):大多数现代编程语言都支持命名空间的概念,它们允许你将类组织到逻辑分组中,从而减少命名冲突的可能性。例如,在C#或Java中,你可以创建命名空间Company.Project.Core来区分你的项目与其他人的项目。
  • 采用有意义的命名:尽量使类名描述其功能或角色,同时避免使用过于通用或常见的名称。
  • 前缀或后缀:有时为了明确表明类的来源或用途,可以使用特定的前缀或后缀。比如,将工具类命名为Utils,或将自定义异常命名为MyProjectException
  • 2. 依赖管理

  • 使用包管理工具:利用如Maven(Java)、npm(JavaScript)、NuGet(.NET)等包管理工具来管理项目的依赖。这些工具不仅帮助你自动下载和更新依赖库,还能帮助你解决版本冲突。
  • 避免过度依赖:尽量减少对外部库的依赖,尤其是那些频繁更改或包含大量未使用功能的库。
  • 3. 代码结构

  • 分层架构:将代码按照逻辑和功能分层,如表现层、业务逻辑层、数据访问层等。这种分层方式有助于分离关注点,同时也使得代码结构更加清晰。
  • 模块化:将功能相似的类组织到模块中。模块化的代码更易于维护、测试和重用。
  • 4. 版本控制

  • 使用Git等版本控制系统:通过版本控制系统,你可以跟踪代码的更改历史,解决代码合并时的冲突,并可以轻松地回滚到之前的版本。
  • 分支策略:制定明确的分支策略,如特性分支(feature branches)、发布分支(release branches)等,以支持多人协作和并行开发。
  • 举例说明

    假设你正在开发一个名为“MyLibrary”的Java项目,其中包含了多个类。

  • 命名空间和包:你可以为整个项目创建一个名为com.mycompany.mylibrary的包。在这个包下,你可以根据功能创建子包,如com.mycompany.mylibrary.data用于数据访问层,com.mycompany.mylibrary.service用于业务逻辑层等。

  • 类命名:避免使用常见的名称,如UtilTool,而是采用更具描述性的名称,如BookManagerUserAuthenticationService等。

  • 依赖管理:如果项目依赖于其他库,使用Maven或Gradle等工具来管理这些依赖。确保在pom.xmlbuild.gradle文件中声明这些依赖,并定期检查是否有更新或安全问题。

  • 代码结构:按照功能将类组织到不同的包中,如com.mycompany.mylibrary.models包含数据模型类,com.mycompany.mylibrary.controllers包含处理请求的控制器类等。

  • 版本控制:使用Git来管理项目代码。在GitHub或GitLab上创建一个仓库,并为你的项目编写README文件、贡献指南和代码样式指南等文档。为每次重大更改创建新的分支,并使用合并请求(merge requests)或拉取请求(pull requests)来合并这些更改到主分支。 

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

  • 变量命名
    • 规范:变量名使用小驼峰命名法(lowerCamelCase),首字母小写,之后每个单词首字母大写。
    • 示例int studentAge; 表示学生年龄。
  • 类命名
    • 规范:类名使用大驼峰命名法(UpperCamelCase),每个单词首字母大写。
    • 示例public class StudentManager 表示学生管理类。
  • 方法命名
    • 规范:方法名也使用小驼峰命名法,首字母小写,表明其行为或职责。
    • 示例public void addStudent(Student student) 表示添加学生的方法。
  • 常量命名
    • 规范:常量名全部大写,单词间使用下划线(_)分隔。
    • 示例public static final int MAX_STUDENTS = 100; 表示最大学生数量的常量。
  • 包命名
    • 规范:包名应该是唯一的,通常采用公司或组织域名反写加上模块名。
    • 示例com.alibaba.myapp.module,其中com.alibaba是公司域名反写,myapp是应用名,module是模块名。
  • 代码格式
    • 规范
      • 大括号风格统一,推荐采用K&R风格(左大括号不另起行)。
      • 每行代码不超过120个字符,超过需要换行。
      • 操作符两边空格,如int a = b + c;
      • 使用空格而不是Tab进行缩进,通常为4个空格。

示例:

public class MyClass {  
    public void myMethod() {  
        if (condition) {  
            doSomething();  
        }  
    }  
}
  • OOP规约
  • 规范
    • 遵守SOLID原则(单一职责、开放封闭、里氏替换、接口隔离、依赖倒置)。
    • 类中的方法应该职责单一,尽量避免单一职责外的操作。
    • 优先使用组合/聚合而非继承来达到代码复用。
    • 接口设计合理,接口中的方法不应超过约定数量(如不超过20个)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值