主要功能包含哪些内容?

时间:2012-11-10 06:40:41

标签: c++ function

采用自上而下的方法,建议将函数设置为较小的只执行单个任务

如此。我不知道主要做什么?只是调用其他功能或我们想要的所有东西?

感谢。

5 个答案:

答案 0 :(得分:5)

我们的想法是将任务分成逻辑抽象。

在这里,我将使用厨房烹饪的例子来说明这个概念。假设您想要准备一些美味的晚餐和一些菜肴。您的心理检查表可能从主要步骤开始:

  • 去杂货店购买食材
  • 预处理成分
  • 烹饪食物
  • 供应食物
  • 清洁菜肴

因此,这些将成为main()

中的功能

然后对于每个步骤,您将其细分一点:(请注意,下面列出的子步骤是每个主要函数将在其自己的函数定义中调用的内容)

  • 去杂货店购买食材:
    • 制作购物清单
    • 访问杂货店
    • 收集成分
    • 支付费用
    • 回家
  • 预处理成分:
    • 洗蔬菜
    • 切碎肉
    • 切碎生姜,丁香......
  • 煮食物
    • 准备罐子和罐子锅
    • 添加食用油
    • 打开炉灶
    • 用锅中的蔬菜焯一下肉,直至完成
  • 供应食物:
    • 设置牌照
    • 将食物分成几部分
    • 打电话给别人吃饭
    • 吃晚餐
  • 干净的菜肴:
    • 用洗涤剂清洗餐具
    • 用水冲洗餐具
    • 把菜拿走

然后,对于每个子步骤,您仍然可以使事物更细粒度地表示单独的逻辑操作,为简洁起见,我们将只检查main()中的前两个函数:

  • 去杂货店购买食材:
    • 制作购物清单:
      • 打开冰箱
      • 检查冰箱的内容
      • 记下冰箱中哪些成分不足。
      • 关闭冰箱
    • 访问杂货店:
    • 收集成分:
      • 打开冰箱
      • 将冷冻蔬菜放入购物车
      • 关闭冰箱
      • 将鲜肉放入购物车
    • 支付费用:
    • 回家:
  • 预处理成分:
    • 洗净蔬菜:
      • 打开冰箱
      • 从冰箱取回蔬菜
      • 关闭冰箱
      • 在水龙头下冲洗蔬菜
    • 切碎肉:
    • 切碎生姜,丁香......

现在注意两件事:

  1. 现在,通过将主要任务分解为更小的子任务,您的程序方法具有非常合理的“自上而下”树状结构。当您查看main时,您可以立即查看整体计划的内容,而无需准确了解每个步骤的实现方式。但是通过检查各个函数,您可以立即了解每个函数如何完成其​​任务......等等。
  2. 您现在可以在多个位置重复使用封装到函数中的任何抽象逻辑(例如,粗体中列出的打开/关闭冰箱操作)。当你需要打开冰箱时,你只需要打开“openFridge”,而不必每次都重新编码完全准确的方法。 (你可以在技术上复制和粘贴代码,但这会导致一种称为代码克隆的反模式:如果你需要改变打开冰箱的方式,你必须在任何地方都这样做,而不是只用1个功能)。

答案 1 :(得分:1)

自上而下的方法从高级系统或设计开始,然后进入低级系统或设计或开发。 自上而下的方法首先关注整个系统或项目的摘要。最后,它侧重于细节设计或开发。 在这种方法中,第一个程序员必须编写main函数的代码。在main函数中,它们将调用其他子函数。最后,他们将为每个子函数编写代码。

答案 2 :(得分:1)

在Top Down方法中,您从高级设计开始。因此,您首先将您的想法提取到main()函数中(如果您使用的是C或类似的语言)。 例如,如果我想计算斐波纳契数,那么从上到下的方法我会从

开始
int main()
{
    int *numbers;
    int n = getCountOfNumbers(); // get the count of numbers to be generated
    generateFibonacci(numbers, n); // generate numbers
    processFibonacci(numbers); // display the numbers
    return 0;
}

这将设置您将对程序执行的操作的抽象实现。 接下来,实现函数getCountOfNumbers(),generateFibonacci()和processFibonacci()来表示您的逻辑和算法。

因此,使用main()函数,您可以表示程序的高级组织。此外,由于它是大多数编程语言的起点,因此您的控制流程从main()函数开始,然后根据您的调用顺序委派给程序中的其他函数。

答案 3 :(得分:0)

自上而下的方法并不是严格意义上的功能和任务,它更像是算法世界的过度简化方法。

通常自上而下的方法是在图灵理论和算法的介绍之后立即让学生理解实际意义的主题,它也是更复杂和更进化的方法的更容易的替代方法。一个涉及数学+算法的课程,它通常适用于大学和计算机科学课程。

您还可以注意到,谈到自上而下的方法没有语言出现,它是一个从任何语言或任何类型的实现中抽象出来的主题,它只是关于通用步骤和算法以及解决问题的方法。 / p>

关于C ++,在非常通用的术语中,main()函数的作用基本上是关于启动应用程序的主线程并管理argcargv值。

答案 4 :(得分:0)

我喜欢将main()视为整个程序的蓝图。它以高级“描述性”方式调用其他函数。这真的描述了我认为任何函数应该如何阅读。

例如,允许用户选择图像并将其缩小为缩略图的程序可能类似于:

// Pseudo-code
int main() {
    string path = getImagePath();
    checkImageValidity(path);
    imageData imgData = new imageData();
    imgData = readImageData(path);
    writeImageData("../thumb.png", imgData, imageType.PNG);
    fileClose(fp);
    return 0;
}

每个函数都可以完成一些工作并可能调用其他函数,但通过阅读main函数,您可以了解程序的一般流程。 “它获取一个图像文件路径,检查它是否是一个有效文件,读取其原始图像数据,将其写入输出文件,然后关闭它。”

真正的程序将比这个程序更复杂,但这只意味着你有更多的功能应该以相同的方式阅读,因为程序的复杂性值得深入和广泛。