数据类型设计_神奇的Object类:万物源于空(1)_面向对象的回顾

前言

       笔者在本专栏---"数据类型设计"中,将涵盖数据结构,数据类型设计,设计模式(C++)的内容,示例紧贴应用.深入浅出易于理解,有细致的分析,力求读者在掌握这些内容的同时有清晰的思路,获得更大的成长空间.

引入

        在Java中,有个类Object称为所有类型的父类,笔者从C++的角度看Object类是如何实现的

回顾面向对象

        面向对象有三大特征:封装,继承和多态.面向对象的特点是所有的过程都由某种事物来完成.

        站在面向过程的角度去看待什么是程序,程序表达的是"数据类型"和"过程".而面向对象把所有过程的实现都交给某个具体对象.于是在面向对象的设计中,把"对象"表达出来,程序基本上就完成了.

        面向对象的优点是容易模块化,程序结构非常清楚.因此在很多领域得到了巨大的应用空间

封装

        封装的意思是把某个个体的"特征"和"动作"封装到一个数据类型中.封装是面向对象中最核心的特征.举个例子,设计一个手动档汽车(Manual_Car)的类型,他的"点火"动作有换挡器,离合器,刹车,火花塞这几个部件参与,则可以做以下类型设计

//伪代码,C++
class Manual_Car{
    private:
        Shifter     shifter;    //换档器
        Clutch      clutch;     //离合器
        Brake       brake;      //刹车
        Spark_plug  sp;         //火花塞
    public:   
        Manual_Car();           //构造函数(略)
        //汽车启动
        starts(){
            shifter.neutral();  //换档器挂空档位
            clutch.pedal();     //离合器踩下
            brake.step();       //踩下刹车
            sp.ignite();        //点火
            shifter.one();      //换档器挂1档
            clutch.lift();      //离合器抬起
        };               
}

        而换挡器,离合器,刹车,火花塞的类型设计,包括各自的"特征"与"动作",单独完成.

=============================内容分割线↓===================================

题外话:事物是在不断进化的,假设手动档汽车的设计改变了,应该如何应对呢?

        1>大幅度改动,原有"部件"很多不用了.这种情况可以推倒重来

        2>逐步改动,有些"部件"一直用,有的不用了.

        解决方案:可以把所有的数据以指针形式传入,例如Shifter * shifter;.这样有了灵活的选择,在构造函数中需要的"部件"赋值指针,不需要的指空.

        如果改动过程中有新部件加入,可以用派生类,使用继承(extend)特性解决.

=============================内容分割线↑===================================

继承和多态

        继承和多态是"一体两面",放在一起更好理解.

继承

        继承有两大特性:增加和修改.

                增加---当类B继承类A时,A的"特性"和"操作"B自动拥有,同时B可以增加新的特性和操作.

                修改---当类B继承类A时,A的函数可以由B的同名函数重新定义,且A的函数可由B调用.

        例如:

//伪代码,C++
class A_father{                //基类(父类)
private:
    DataType1 dt1;             //一个DataType1类型的对象 
public:
    A_father();                //构造函数(略)
    void fun();                //一个叫fun的函数
}

class B_son:public A_father{   //派生类(子类)
private:
    DataType2 dt2;             //增加:一个DataType2类型的对象
public:
    B_son();                   //构造函数(略),应传入一个父类属性的对象dt1
    void fun(){                //子类同名函数,在此修改原功能,增添内容
        A_father.fun();        //可调用父类函数
        dt2.fun();             //把增加的属性的方法添加进来
        ...                    //其他内容
    }
}

多态

        多态理解为多种形态.在继承关系中,每个派生类(子类)对象都是基类(父类)对象的一种形态.

        多态存在的语法基础有两个:

                1>基类对象引用可以指向派生类对象

                2>基类对象指针可以指向派生类对象指针

        对于上面的例子,有下面几句代码成立:

//接上一段代码,假设构造函数中没有参数传入
A_father af();                    //生成基类对象af;
B_son    bs();                    //生成派生类对象bs;
&af=bs;                           //基类引用指向派生类对象

A_father * ptr1 = new A_father ();//生成基类对象,并用ptr1指向他;
B_son* ptr2 = new B_son();        //生成派生类对象,并用ptr2指向他;
ptr1=ptr2;                        //基类对象指针指向派生类对象指针;

 多态的应用

        形参使用基类引用或者基类指针,传参数时使用派生类对象或者派生类指针.他的好处是不用更改大量的代码即可完成重新设计.用一个比喻:父类引用或者指针做招牌,实际做事的是子类对象.在设计模式中,有一种"桥接模式"是多态的典型用法.

小结

        面向对象的基础内容

考虑柔性负荷的综合能源系统低碳经济优化调度【考虑碳交易机制】(Matlab代码实现)内容概要:本文围绕“考虑柔性负荷的综合能源系统低碳经济优化调度”展开,重点研究在碳交易机制下如何实现综合能源系统的低碳化与经济性协同优化。通过构建包含风电、光伏、储能、柔性负荷等多种能源形式的系统模型,结合碳交易成本与能源调度成本,提出优化调度策略,以降低碳排放并提升系统运行经济性。文中采用Matlab进行仿真代码实现,验证了所提模型在平衡能源供需、平抑可再生能源波动、引导柔性负荷参与调度等方面的有效性,为低碳能源系统的设计与运行提供了技术支撑。; 适合人群:具备一定电力系统、能源系统背景,熟悉Matlab编程,从事能源优化、低碳调度、综合能源系统等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究碳交易机制对综合能源系统调度决策的影响;②实现柔性负荷在削峰填谷、促进可再生能源消纳中的作用;③掌握基于Matlab的能源系统建模与优化求解方法;④为实际综合能源项目提供低碳经济调度方案参考。; 阅读建议:建议读者结合Matlab代码深入理解模型构建与求解过程,重点关注目标函数设计、约束条件设置及碳交易成本的量化方式,可进一步扩展至多能互补、需求响应等场景进行二次开发与仿真验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

重庆彭枫

你的鼓励是我创作的动力,谢谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值