类:面向对象范式总是让我感到困惑

Class: Object oriented paradigm had always confused me

本文关键字:面向对象 范式      更新时间:2023-10-16

有人可以用一些很好的例子解释清楚我c++类是如何有用的,为什么它是一个很好的编程实践。我读了很多关于类的书,用一些类在c++中做了一些编程,但我仍然不清楚为什么需要类,以及它们如何使代码更健壮和可读。

谢谢! !

当你输入一个脚本或20行或100行代码时,这没什么大不了的。

当你达到数百万时,你开始需要一种方法来实际可视化你的代码。你需要能够谈论不同的部分以及它们如何相互作用。

当你看一个很长的程序时,它是如何组织的?当你有20个函数时,哪些函数对应于哪些数据?现在记录并记住它,这样下次你看代码的时候,你就能马上回到你所看到的地方。

对象允许您将功能与其相关的数据分组。它可以让您快速找到所需的功能。一旦习惯了它,就很难想象为什么要在没有它的情况下编写代码。我不确定如果没有面向对象流程图,你将如何绘制设计图并将其展示给其他人?真的吗?

如果你设计你的非oo代码非常好地使用私有变量(这个文件的私有)和与数据相关的函数,你可以得到一些这种组织效果,但它是混乱的,有很多开销。此外,对于那些不太"Get"OO的人来说,将整个代码库送入代码地狱是非常容易的。

这是一种非常舒适,逻辑合理的方式来组织代码和数据。

  1. 在一所声誉良好的学校注册CS课程。
  2. 尽可能多地学习计算机编程课程。
  3. 阅读大量关于面向对象的书籍(以及关于过程/模块化编程的旧经典)
  4. 冲洗并重复直到毕业。

到那时你应该明白什么是类了

在游戏中,你有一个枪支类。它有一定数量的弹药。你要确保开火时,少了一颗子弹。当重新装填时,弹夹大小会被添加回弹药中。

最重要的是你要保持正确的"弹药"数量。通过封装所有组成枪的变量,作用域到一个枪的实例。枪的使用者不需要考虑太多,也不需要担心破坏/破坏弹药(或其他)的价值。

 class CGun
 {
 private:
    unsigned int ammo;
 public:
    CGun();
    void Reload() 
    { 
         if (ammo == 0)
         {
             ammo += 40/*40 bullets per clip*/
         }
    }
    void Fire() 
    {
        if (ammo > 0)
        {
            --ammo; 
        }
    }
 };

现在你可以很容易和安全地使用这个对象,而不用担心破坏底层数据。

 int main()
 {
     CGun aGun;
     aGun.Fire(); 
 }

我要给你的过于简化的答案是,当你注意到你的程序往往有1)由相关数据组成的结构,以及2)在这些结构上操作的许多函数时,那么你就有了一个类。

例如,在实时操作系统中,一个任务通常有一个任务控制块结构,它包含了很多关于任务的信息,比如它的开始指针,它的优先级,它的堆栈的位置,它的状态(准备运行,阻塞,停止,尚未启动,等等),它的名字,以及任何线程特定的全局变量的位置。还有很多对任务进行操作的函数,它们将指向该任务控制块的指针作为参数。如果这个实时操作系统是用c++编写的,那么你就可以创建一个包含任务控制块数据的Task类,而在任务上操作的函数将是这个类的方法。

这是一个非常开放的问题,但简而言之,类提供了编程与需要考虑的现实世界对象、概念和想法之间更好的表示。类可以用来表示物理对象或概念以及可以对其执行的操作。通过链接对象和操作,可以使使用和关系更加明显,简而言之,使代码更容易掌握(尽管在大多数情况下仍然不是琐碎的)。