理解“功能内聚”

发布于:2025-04-05 ⋅ 阅读:(10) ⋅ 点赞:(0)

链接:

  理解“偶然内聚”

 理解“逻辑内聚”

 理解“时间内聚”

 理解“过程内聚”

 理解“通信内聚”

 理解“顺序内聚”

 理解“功能内聚”

 

功能内聚(Functional Cohesion)是最高级别的内聚形式,指的是模块内的所有元素都紧密地围绕着一个单一的功能或任务进行设计。这意味着模块的所有组成部分都是为了完成这个特定的任务而存在的,并且这些部分之间具有非常强的逻辑关联性。功能内聚的模块通常是最小化、最专注的,易于理解、维护和重用。

 


 

功能内聚的特点:

  • 单一职责:模块专注于实现一个明确的功能或任务,确保其内部的所有操作都直接支持这一目标。
  • 高内聚度:由于模块的所有组件都是为了完成同一个任务而设计的,因此它们之间的联系非常紧密,形成了高度的内聚性。
  • 清晰与简单:功能内聚的模块结构清晰,容易理解和使用,开发人员可以迅速掌握其用途和工作原理。

 


 

功能内聚的优点

  1. 可读性和可维护性高:因为模块只做一件事情,代码更加简洁明了,便于阅读和理解。
  2. 易于测试:由于模块功能单一,边界条件相对较少,使得单元测试更加简单有效。
  3. 良好的扩展性:如果需要增加新的功能,可以通过创建新的模块来实现,而不会影响现有的功能模块。
  4. 重用性强:功能内聚的模块由于其专注性,往往可以在不同的上下文中被复用。

 


 

示例:用户登录验证

假设我们需要开发一个系统,其中包含一个专门用于验证用户登录信息的功能模块 LoginValidator。该模块将负责检查用户名和密码是否正确,以及账号是否被锁定等安全措施。所有这些功能都围绕着“验证用户登录”这一核心任务设计。

示例代码:

public class LoginValidator
{

    /**
     * 验证用户的登录尝试。
     *
     * @param username 用户名
     * @param password 密码
     * @return 返回 true 如果登录成功,否则返回 false
     */
    public boolean validateLogin(String username, String password)
    {
        // Step 1: 检查账户是否存在
        if (!accountExists(username))
        {
            System.out.println("Account does not exist.");
            return false;
        }

        // Step 2: 检查账户是否被锁定
        if (isAccountLocked(username))
        {
            System.out.println("Account is locked.");
            return false;
        }

        // Step 3: 验证密码
        if (!validatePassword(username, password))
        {
            incrementFailedLoginAttempts(username);
            System.out.println("Invalid password.");
            return false;
        }

        // Step 4: 重置失败登录尝试次数
        resetFailedLoginAttempts(username);

        System.out.println("Login successful.");
        return true;
    }

    private boolean accountExists(String username)
    {
        // 假设这里有一些逻辑来检查账户是否存在
        return "validUser".equals(username);
    }

    private boolean isAccountLocked(String username)
    {
        // 假设这里有一些逻辑来检查账户是否被锁定
        return false; // For simplicity, assume no accounts are locked.
    }

    private boolean validatePassword(String username, String password)
    {
        // 假设这里有一些逻辑来验证密码
        return "password123".equals(password);
    }

    private void incrementFailedLoginAttempts(String username)
    {
        // 假设这里有一些逻辑来增加失败登录尝试次数
    }

    private void resetFailedLoginAttempts(String username)
    {
        // 假设这里有一些逻辑来重置失败登录尝试次数
    }
}

在这个例子中,LoginValidator 类专注于执行与用户登录验证相关的任务。它包含了几个辅助方法,如 accountExists, isAccountLocked, validatePassword, incrementFailedLoginAttempts, 和 resetFailedLoginAttempts,但所有这些方法都直接服务于主方法 validateLogin 的目的——验证用户登录信息的有效性。这正是功能内聚的一个典型例子。