第九课、计算器界面代码重构

一、重构的概念

1、重构是以改善代码质量为目的代码重写

(1)、使其软件的设计和架构更加合理

(2)、提高软件的扩展性和维护性

2、代码实现和代码重构的不同

(1)、代码实现:按照设计编程实现,重在实现功能

(2)、代码重构:以提高代码质量为目的软件架构优化

(3)、区别

A、代码实现时不考虑架构的好坏,只考虑功能的实现

B、代码重构时不影响已实现的功能,只考虑架构的改善

3、软件开发的过程

(1)、从工程的角度对软件开发中的活动进行定义和管理

4、什么样的代码需要重构

(1)、当发现项目中重复的代码越来越多时

(2)、当发现项目中代码功能越来越不清晰时

(3)、当发现项目中代码离设计越来越远时

 二、计算器代码的重构(利用二阶构造模式)

//QCalculatorUI.h

#ifndef _QCALCULATORUI_H_
#define _QCALCULATORUI_H_

#include <QtGui/QApplication>
#include <QLineEdit>
#include <QPushButton>

class QCalculatorUI : public QWidget
{
    QLineEdit* m_edit;//组合关系
    QPushButton* m_buttons[20];

    QCalculatorUI();
    bool construct();
public:
    static QCalculatorUI* NewInstance();
    void show();
    ~QCalculatorUI();
};

#endif // _QCALCULATORUI_H_

//QCalculatorUI.cpp

#include "QCalculatorUI.h"

QCalculatorUI::QCalculatorUI()  : QWidget(NULL,Qt::WindowCloseButtonHint )
{
}

bool QCalculatorUI::construct()
{

    bool ret = true;
    QLineEdit *m_edit = new QLineEdit(this);//父组件是this的原因:组合关系,同生死共存亡
    const char* btnText[20] =
    {
        "7", "8", "9", "+", "(",
        "4", "5", "6", "-", ")",
        "1", "2", "3", "*", "<-",
        "0", ".", "=", "/", "C"
    };

    if(m_edit != NULL)
    {
        m_edit->resize(240,30);
        m_edit->move(10,10);
        m_edit->setReadOnly(true);//设置文本框为只读,不输入字符串

    }
    else
    {
        ret = false;
    }

    for(int i=0; (i<4) && ret; i++)//(i<4) && ret表示QLineEdit没有生成,这里也 没必要运行了
    {
        for(int j=0; (j<5) && ret; j++)
        {
            m_buttons[i*5 + j] = new QPushButton(this);
            if(m_buttons[i*5 + j])
            {
                m_buttons[i*5 + j] ->resize(40,40);//[i*5 + j]是转换为一维来算
                m_buttons[i*5 + j]->move(10 + (10 + 40)*j, 50 + (10 + 40)*i);//横坐标移五个,纵坐标移四个
                m_buttons[i*5 + j]->setText(btnText[i*5 + j]);
            }
            else
            {
                ret = false;
            }

        }
    }

    return ret;

}
QCalculatorUI* QCalculatorUI::NewInstance()
{
    QCalculatorUI* ret = new QCalculatorUI();

    if(!(ret && ret->construct()))
    {
        delete ret;
        ret = NULL;
    }

    return ret;
}
void QCalculatorUI::show()
{
    QWidget::show();
    setFixedSize(width(), height());//要放在show()后,否则是先固定再显示
}

QCalculatorUI::~QCalculatorUI()
{

}

//main.cpp

#include <QtGui/QApplication>
#include "QCalculatorUI.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QCalculatorUI* cal = QCalculatorUI::NewInstance();
    int ret =-1;

    if(cal != NULL)
    {

        cal->show();
        ret = a.exec();
        delete cal;//记得删除父对象

    }

    return ret;
}

三、小结

(1)、重构是软件开发中的重要概念

(2)、重构是以提高代码质量为目的的软件开发活动

(3)、重构不能影响已有的软件功能

(4)、当软件功能实现进行了一定的阶段 时候就需要考虑重构

(5)、重载可简单地理解为对软件系统进行重新架构

 

时间: 2024-12-08 18:59:27

第九课、计算器界面代码重构的相关文章

计算器界面代码重构

计算器界面代码重构什么是软件开发过程中的重构?重构(Refactoring)——以改善代码质量为目的代码重写 使其软件的设计和架构更加合理 提高软件的扩展性和维护性 代码实现与代码重构不同——代码实现 按照设计编程实现,重心在于功能实现——代码重构 以提高代码质量为目的软件架构设计 区别: 代码实现时不考虑架构的好坏,只考虑功能的实现 代码重构时不能影响已实现的功能,只考虑架构的改善 QCalculatorUI.h #ifndef _QCALCULATORUI_H_ #define _QCALC

QT之计算器代码重构

首先我们来讲讲为什么要进行代码重构?在一些大的项目中,代码重构是一个必不可少的步骤.因为项目大了,代码也就多了,后期的维护将会很难,所以我们要适当的进行代码重构,让代码的可复用性提高,使软件的设计和架构更加合理. 代码实现和代码重构有什么不同呢?代码实现的重点是功能的实现,而代码重构则是在实现功能的基础上进行再次优化,以提高代码质量. 那么什么样的代码需要重构呢?依据以往的项目开发经验来看呢,当发现项目中的重复代码越来越多时.代码功能越来越不清晰时.代码离设计越来越远时等,那么这时我们就该进行代

BeagleBone Black板第九课:测试读取ADC数据

BBB板第九课:测试读取ADC数据 之前我们初步学习了GPIO的使用方法,接下来认识下BBB板上ADC数据的读取操作,因为用BBB板做外部控制,接收外部传感器的一些模拟数据,模数转换ADC是需要用到的.所以在这里我也测试一下这BBB板的ADC简单功能,以后有深入学习到知识再进行补充. ADC资源引脚,P9_32至P9_40共九个引脚,其中P9_32为电源正极,P9_34为共地,其他七个对应七个ADC输入脚,因为有一个Ain_7估计是内部使用了,所以我们只使用Ain_0至Ain_6这七个ADC.

【C语言探索之旅】 第二部分第九课: 实战&quot;悬挂小人&quot;游戏

内容简介 1.课程大纲 2.第二部分第九课: 实战"悬挂小人"游戏 3.第二部分第十课预告: 安全的文本输入 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算那点事 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理 创建

【C语言探索之旅】 第二部分第九课: 实战[悬挂小人]游戏

内容简介 1.课程大纲 2.第二部分第九课: 实战"悬挂小人"游戏 3.第二部分第十课预告: 安全的文本输入 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算那点事 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理 创建

从零开始学android&lt;使用嵌套布局实现计算器界面.十七.&gt;

所谓的嵌套布局就是在一个文件中嵌套多个布局文件 <span style="font-size:18px;"> <LinearLayout android:layout_width="match_parent" android:layout_height="fill_parent" android:orientation="vertical" > <FrameLayout android:layou

【C++探索之旅】第一部分第九课:数组威武,动静合一

内容简介 1.第一部分第九课:数组威武,动静合一 2.第一部分第十课预告:文件读写,海阔凭鱼跃 数组威武,动静合一 上一课<[C++探索之旅]第一部分第八课:传值引用,文件源头>中,我们学习了函数参数的不同传递形式:值传递和引用传递,也学习了如何用头文件和源文件来更好地组织项目. 在不少程序中,我们都需要使用多个相同类型的变量.例如:一个网站的用户名列表(一般是string类型):或者一场比赛的前10个最佳得分(一般是int类型). 类似地,C++和大多数编程语言一样,也有将多个相同类型的数据

记录一次代码重构的思路(初稿)

本次重构,需要注意: 1.代码的规范,详细的注释 主要集中 在方法和类的描叙 2.目录结构的合理,包名的设计 首先目录的设计: 1.activitiy的目录 (所有的界面) 2.serverice目录 (后台的服务) 3.通用的目录 (通用的方法与常量:譬如时间,字符串操作,定义常量) 4.数据库 目录 (sqlite的方法) 5.网络通信目录(上传数据与更新软件的) 6.文件目录(文件操作的目录) 7.参数配置目录 (配置xml的方法) 最终设计的结果: 文件目录与参赛配置,都放到tools中

NeHe OpenGL教程 第九课:移动图像

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第九课:移动图像 3D空间中移动图像: 你想知道如何在3D空间中移动物体,你想知道如何在屏幕上绘制一个图像,而让图像的背景色变为透明,你希望有一个简单的动画.这一课将教会你所有的一切.前面的课程涵盖了基础的OpenGL,每一课都是在