理解“功能内聚”

news2025/4/8 1:12:45

链接:

  理解“偶然内聚”

 理解“逻辑内聚”

 理解“时间内聚”

 理解“过程内聚”

 理解“通信内聚”

 理解“顺序内聚”

 理解“功能内聚”

 

功能内聚(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 的目的——验证用户登录信息的有效性。这正是功能内聚的一个典型例子。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2329441.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记一次表格数据排序优化(一)--排序30000条数据有多卡

目录 需求 第一次尝试 运行环境 思路 存储 排序 触发排序操作 如何实现高效的排序 关键1 关键2 关键3 磨刀不误砍柴工 关键4 代码 效果 卡顿原因分析 原因1 原因2 第二次尝试 需求 1 我的qt程序通过表格显示30000条数据。数据来自udp,udp每隔10秒…

图形渲染中的定点数和浮点数

三种API的NDC区别 NDC全称,Normalized Device Coordinates Metal、Vulkan、OpenGL的区别如下: featureOpenGL NDCMetal NDCVulkan NDC坐标系右手左手右手z值范围[-1,1][0,1][0,1]xy视口范围[-1,1][-1,1][-1,1] GPU渲染的定点数和浮点数 定点数类型&a…

【深度学习】CNN简述

文章目录 一、卷积神经网络(CNN)二、CNN结构特性1. CNN 典型结构2. 局部连接3. 权重共享4.空间或时间上的次采样 三、理解层面 一、卷积神经网络(CNN) 卷积神经网络(Convolutional Neural Network,CNN)是一种用于处理…

强化学习课程:stanford_cs234 学习笔记(3)introduction to RL

文章目录 前言7 markov 实践7.1 markov 过程再叙7.2 markov 奖励过程 MRP(markov reward process)7.3 markov 价值函数与贝尔曼方程7.4 markov 决策过程MDP(markov decision process)的 状态价值函数7.4.1 状态价值函数7.4.2 状态…

紫檀博物馆一游与软件开发

今天去逛了中国紫檀博物馆,里边很多层展品,也有一些清代的古物,檀木,黄花梨木家具和各种摆件,馆主陈丽华女士也是发心复原、保留和弘扬中国的传统文化,和西游记唐僧扮演者迟成瑞先生一家。 每一件展品都精…

RocketMQ初认识

ProducerCustomerNameServer: Broker的注册服务发现中心BrokerServer:主要负责消息的存储、投递和查询以及服务高可用保证 RocketMQ的集群部署: 单个master的分支多个Master 模式:集群中有多个 Master 节点,彼此之间相互独立。生产者可以将消…

Chrome开发者工具实战:调试三剑客

在前端开发的世界里,Chrome开发者工具就是我们的瑞士军刀,它集成了各种强大的功能,帮助我们快速定位和解决代码中的问题。今天,就让我们一起来看看如何使用Chrome开发者工具中的“调试三剑客”:断点调试、调用栈跟踪和…

C++/Qt 模拟sensornetwork的工作

C/Qt 可视化模拟sensornetwork的工作 C/Qt 模拟sensornetwork的工作 C/Qt 可视化模拟sensornetwork的工作内容简介(一) 需求和规格说明(1)问题描述(2)设计目的(3)基本要求&#xff0…

ffmpeg音频分析

对一个16k 单声道音频,生成频谱图 ./ffmpeg -i input.wav -lavfi "showspectrumpics800x400:modecombined:scalelin:gain1.5" spectrum.png

【多线程】CAS机制

目录 一. CAS的概念 二. CAS的原理 三.标准库中的CAS 四. CAS的应用 (1)原子类的使用 (2) 自旋锁的实现 五. CAS的ABA问题 一. CAS的概念 CAS(Compare And Swap)机制是一种无锁的并发控制技术&#…

音视频(四)android编译

前言 前面已经讲了在windows上应用了,这章主要讲述android上编译 1:环境 git 如果失败 直接跑到相应网站 手动下载 ubuntu22.* android ndk r21e download:https://developer.android.google.cn/ndk/downloads/index.html?hluk 为什么用这个&#xff0…

Chapter07_图像压缩编码

文章目录 图像压缩编码图像压缩编码基础图像压缩的基本概念信息相关信息冗余信源编码及其分类 图像编码模型信源编码器模型信源解码器模型 数字图像的信息熵信源符号码字平均长度信息熵信息量 变长编码费诺码霍夫曼编码 位平面编码格雷码 图像压缩编码 数字图像的压缩是指在满…

团体设计程序天梯赛L2-025 # 分而治之

文章目录 题目解读输入格式输出格式 思路Ac Code参考 题目解读 在战争中,我们希望首先攻下敌方的部分城市,使其剩余的城市变成孤立无援,然后再分头各个击破。为此参谋部提供了若干打击方案。本题就请你编写程序,判断每个方案的可…

Linux网络套接字

Socket 编程 UDP 本章将函数介绍和代码编写实战一起使用。 IPv4 的 socket 网络编程,sockaddr_in 中的成员 struct in_addr.sin_addr 表示 32 位 的 IP 地址 但是我们通常用点分十进制的字符串表示 IP 地址,以下函数可以在字符串表示和in_addr 表示之间转换; 字符串转 in_addr…

看爬山虎学本领 软爬机器人来创新 各种场景能适应

*本文只做阅读笔记分享* 一、灵感来源:向植物取经 大家好!今天来聊一款超酷的软爬机器人,它的灵感来自会攀爬的植物——爬山虎。 大家都知道,爬墙高手爬山虎能在各种复杂墙面轻松生长攀爬,可现有的攀爬机器人在复杂…

极客天成NVFile:无缓存直击存储性能天花板,重新定义AI时代并行存储新范式

在AI算力需求呈指数级爆发的今天,存储系统正面临一场前所未有的范式革命。传统存储架构中复杂的缓存机制、冗余的数据路径、僵化的扩展能力,已成为制约千卡GPU集群算力释放的重要因素。极客天成NVFile并行文件存储系统以全栈并行化架构设计和无缓存直通数…

Java实现N皇后问题的双路径探索:递归回溯与迭代回溯算法详解

N皇后问题要求在NN的棋盘上放置N个皇后,使得她们无法互相攻击。本文提供递归和循环迭代两种解法,并通过图示解释核心逻辑。 一、算法核心思想 使用回溯法逐行放置皇后,通过冲突检测保证每行、每列、对角线上只有一个皇后。发现无效路径时回退…

谷歌开源单个 GPU 可运行的Gemma 3 模型,27B 超越 671B 参数的 DeepSeek

自从 DeepSeek 把训练成本打下来之后,各个模型厂家现在不再堆参数进行模型的能力对比。而是转向了训练成本优化方面,且还要保证模型能力不减反增的效果。包括使用较少的模型参数,降低 GPU 使用数量,降低模型内存占用等等技术手段。…

C++_类和对象(下)

【本节目标】 再谈构造函数Static成员友元内部类匿名对象拷贝对象时的一些编译器优化再次理解封装 1. 再谈构造函数 1.1 构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。 class Date { public:Date(in…

Docker设置代理

目录 前言创建代理文件重载守护进程并重启Docker检查代理验证 前言 拉取flowable/flowable-ui失败,用DaoCloud源也没拉下来,不知道是不是没同步。索性想用代理拉镜像。在此记录一下。 创建代理文件 创建docker代理配置 sudo mkdir -p /etc/systemd/s…