[毕业设计]C++程序类内聚度的计算与存储

news2024/9/21 22:17:32

目录

前言

课题背景和意义

实现技术思路

实现效果图样例


前言


    📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。

🚀对毕设有任何疑问都可以问学长哦!

大家好,这里是海浪学长毕设专题,本次分享的课题是

🎯C++程序类内聚度的计算与存储

课题背景和意义

如今市场上应用软件层出不穷,需要一款测量面向对象系统的类内聚度的程序,设计者基于现有的计算类内聚度的方法,设计并实现C++语言类内聚度度量工具。

系统使用Java语言,利用Eclipse工具进行编写,并且使用了MySQL WorkBench工具对MySQL数据库进行相应管理。系统对被测代码进行扫描与分析,找出被测代码中的成员变量、方法以及每种方法中所使用的属性。为了能够更加准确而直观的反应被测代码的类内聚度,通过LCOM1、LCOM2、LCOM3、LCOM4、CO、LCOM5、COH、TCC、LCC多种内聚度,进行类内聚度计算。

结果表明,由于多种类内聚度计算的方法侧重点不同,能从不同角度了解类内聚度的值,在实际设计一个质量优良的类的过程中可以起到良好引导的作用,这不仅能够提高一个程序的可维护性,还能提高程序的可复用性。开发C++程序类内聚度的计算与存储软件主要是为了分析代码的类内聚度,以计算结果作为实际设计一个质量优良的类参考,从而提高代码质量以及可维护性。

实现技术思路

定义

定义名

解释

内聚度

前述信息隐藏和局部化概念的自然扩展,它标志着一个模块内部各成分彼此结合的紧密程度。内聚度可按高低程度总共分为7个等级,一般来说内聚度越高越好

LCOM1

计算的是类中没有共享实例变量的方法对数目。

LCOM2

计算类中有共享实例变量的方法对数目与没有共享实例变量的数目差值。

LCOM3

Li和Henry提出LCOM3计算类中没有共享实例变量的方法集数目。后来Hitz和 Montazeri重新定义了LCOM3。他们以图论为基础统计类中两个不同方法中至少有一个共享实例变量的方法对数。

CO

CO度量方法计算的是类中存在的有共享实例变量的方法对数目与可能存在的方法对数目的比值。

LCOM5

计算的是属性被方法平均访问的个数,是一个相对概念。

COH

与LCOM5类似,都以一个相对比值作为度量消除了类中方法个数对度量结果的影响。

TCC

计算出类中有直接关联的方法对数目与类中最大可能存在的方法对数目的比值。

LCC

计算出了类中有直接或间接关联方法对数目与最大可能存在的方法对数目比值。

C++程序类内聚度计算与存储系统基本系统模型

 

 功能模块设计

 C++程序类内聚度的计算与存储系统采用了多种方法计算类的内聚度,将LCOM1、LCOM2、LCOM3分为一类计算,通过类名查找类名ID,通过类名ID查找数据库中的方法名表、属性名表、关系表,创建一个方法对类,对属性进行遍历,对方法进行遍历,查找具有同一属性的方法对,将它们存入方法对集合中,得到具有相同属性的方法对。LCOM1计算未共享变量的方法对,LCOM2计算没有共享变量与共享变量的方法对的差值,LCOM3计算共享变量的方法对。将LCOM4与CO分为一类计算,LCOM4与LCOM3近似,它们的差异在于LCOM4需计算的是共享变量的方法对要存在调用关系。CO计算实际共享变量的方法对与可能存在共享变量的方法对的数目的比值。将LCOM5、COH分为一类计算,求得类中方法的集合、类中属性的集合、类中访问每一个属性的方法对的数目,通过计算公式求得LCOM5的结果。COH是LCOM5计算公式的变形。将TCC、LCC分为一类计算,求得类中最大可能共享变量的方法对以及共享变量的方法对之间具有直接关联关系的方法对数目,通过计算公式求得TCC的结果。LCC与TCC近似,但还需计算共享变量的方法对之间具有间接关联关系的方法对数目。

实现效果图样例

 

我是海浪学长,创作不易,欢迎点赞、关注、收藏、留言。

毕设帮助,疑难解答,欢迎打扰!

最后

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

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

相关文章

651页23万字智慧教育大数据信息化顶层设计及智慧应用建设方案

目录 一、 方案背景 1.1 以教育现代化支撑国家现代化 1.2 教育信息化是教育现代化重要内容和标志 1.3 大数据驱动教育信息化发展 1.4 政策指导大数据推动教育变革 1.5 教育大数据应用生态服务教育现代化 二、 建设需求 2.1 地区教育系统亟待进行信息共享、系统融合 2.2…

L2正则线性回归(岭回归)

岭回归 数据的特征比样本点还多,非满秩矩阵在求逆时会出现问题 岭回归即我们所说的L2正则线性回归,在一般的线性回归最小化均方误差的基础上增加了一个参数w的L2范数的罚项,从而最小化罚项残差平方和 简单说来,岭回归就是在普通…

FreeRTOS基础知识

目录 1.任务调度器简介 1.1抢占式调度举例 1.2时间片调度举例 2.任务状态 3.总结 1.任务调度器简介 调度器就是使用相关的调度算法来决定当前需要执行哪个任务。 FreeRTOS一共支持以下三种任务调度方式: FreeRTOS调度方式抢占式调度主要是针对优先级不同的任务…

vector深度剖析及模拟实现

vector模拟实现🏞️1. vector的扩容机制🌁2. vector迭代器失效问题📖2.1 insert导致的失效📖2.2 erase导致的失效🌿3. vector拷贝问题🏜️4. 模拟实现vector🏞️1. vector的扩容机制 #include&…

SQL快速入门、查询(SqlServer)[郝斌SqlServer完整版]

文章目录SQL学前导图一 、基本信息1 相关名词数据库相关基本概念:字段、属性、记录(元祖)、表、主键、外键2 基本语句3 约束:主键约束、外键约束、check约束、default约束、唯一约束二、查询1 计算列2 distinct(去重)3 between4 i…

生产跟踪是生产控制的基础,其主要功能有哪些?

生产跟踪是生产控制的基础,只有对生产的过程全面了解,才能掌握和控制生产的执行情况,所以生产跟踪模块在制造执行系统中一种起着举足轻重的作用。生产跟踪,不单单是对生产过程进行监控和记录数据,还需要将各个生产环节…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java校园新闻发布管理系统574ec

面对老师五花八门的设计要求,首先自己要明确好自己的题目方向,并且与老师多多沟通,用什么编程语言,使用到什么数据库,确定好了,在开始着手毕业设计。 1:选择课题的第一选择就是尽量选择指导老师…

ubuntu18.04上点云PCL 库使用初探

PCL 库使用资料 在 ubuntu18.04 上使用pcl记录 一、 安装 首先需要在 ubuntu 上安装c 库 sudo apt install libpcl-dev dpkg -S pcl 查看包文件安装的位置,包括头文件和库文件,进到库文件路径下看,目前安装的是 pcl 1.8.1 /usr/include/pc…

最全Java知识点总结归纳

一、流 Java所有的流类位于http://java.io包中,都分别继承字以下四种抽象流类型。 继承自InputStream/OutputStream的流都是用于向程序中输入/输出数据,且数据的单位都是字节(byte8bit)。 继承自Reader/Writer的流都是用于向程序中输入/输出数据&#x…

黄佳《零基础学机器学习》chap3笔记

黄佳 《零基础学机器学习》 chap3笔记 第3课 线性回归——预测网店的销售额 文章目录黄佳 《零基础学机器学习》 chap3笔记第3课 线性回归——预测网店的销售额3.1 问题定义:小冰的网店广告该如何投放3.2 数据的收集和预处理3.2.1 收集网店销售额数据3.2.2 数据读取…

功能测试(五)—— web项目抓包操作与测试报告

目录 目标 一、网络相关知识介绍 1.1 请求 1.2 响应 二、抓包工具的应用 2.1 过滤 2.2 删除数据 2.3 查看数据包内容 2.4 定位Bug 2.5 弱网测试 2.6 设置断点(请求之前) 2.7 设置断点(响应之后) 三、测试报告 目标 …

Java 多线程ThreadLocal使用

前面文章多线程间的同步控制和通信,是为了保证多个线程对共享数据争用时的正确性的。那如果一个操作本身不涉及对共享数据的使用,相反,只是希望变量只能由创建它的线程使用(即线程隔离)就需要到线程本地存储了。 Java…

Spring学习:三、Spring IoC 容器配置-注解方式

5. Spring IoC 容器配置-注解方式 5.1 注解定义Bean对象 在Bean class 添加 注解 Spring2.5 提供 Component 效果相当于 <bean> 元素 配置包扫描&#xff0c;通知spring 注解Bean 在哪个包下面 使用 <context> 命名空间 ,在spring的配置文件中添加context命令空…

【图】认识与表达

文章目录一、图的基本构成二、图的表达方式1&#xff09;邻接矩阵2&#xff09;邻接表3&#xff09;数组4&#xff09;综合一、图的基本构成 地图上有很多的建筑&#xff0c;每个建筑之间有着四通八达的道路连接着&#xff0c;如果想要使用数据结构来表示建筑和建筑之间的道路…

知识图谱-KGE-语义匹配-双线性模型-2019:CrossE

【paper】 Interaction Embeddings for Prediction and Explanation in Knowledge Graphs【简介】 本文是浙大和苏黎世大学的学者联合发表于 WSDM 2019 上的工作&#xff0c;文章提出了 CrossE&#xff0c;模型的思想也没有很高端&#xff0c;就是引入了一个矩阵C&#xff0c;用…

List——顺序表链表OJ

文章目录前言一、合并两个有序链表二、使用顺序表实现“杨辉三角”三、环形链表四、环形链表Ⅱ总结前言 上两篇内容&#xff0c;对链表和顺序表进行了讲解并手动实现了自己的顺序表和链表&#xff0c;本篇文章将结合LeetCode上的OJ题&#xff0c;进行具体的使用以熟悉其中的方…

Spring注解式缓存redis

一、Spring 整合redis 导入依赖 <redis.version>2.9.0</redis.version> <redis.spring.version>1.7.1.RELEASE</redis.spring.version><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId>&l…

Qt中操作SQLite数据库

0.前言 SQLite是一款开源、轻量级、跨平台的数据库&#xff0c;无需server&#xff0c;无需安装和管理配置。它的设计目标是嵌入式的&#xff0c;所以很适合小型应用&#xff0c;也是Qt应用开发种常用的一种数据库。 1.驱动 Qt SQL模块使用驱动程序插件&#xff08;plugins&am…

多线程与高并发(一)

【前言】&#xff1a; 多线程、JVM、操作系统。 【概述】&#xff1a; 基础概念 JUC同步工具 同步容器 Disruptor //一个MQ框架&#xff0c;公认的单机环境下效率最高。 线程池 【线程的概念】&#xff1a; 【纤程】&#xff1a; 【 run和start的区别 】&#xff1a; //n…

[附源码]Python计算机毕业设计SSM家用饰品在线销售系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…