写代码的分而治之

写代码的核心原则 :抽象难变,具体易变;故要针对接口编程,实现的粒度要细化;
程序员脱离不了写代码,如果提高了写代码的质量,效率,则后续就可大大减少写代码的时间,代码的复用价值就更大,写代码的乐趣也更高。
分而治之不仅用于战略、设计层面,也可用于战术、实现层面;甚至任何领域,因为他是一种方法论。

这里仅从实现代码层面,讨论分而治之。
代码 从微观层面 那就是机器码->微码->汇编指令
代码 从宏观层面 就是编程语言对应的语句->函数
其中函数就是语句的有序集合,可以理解函数就是大语句,大指令;
在我们的编程中其实都市在编写函数,不管是面向过程编程还是面向对象编程,不管定义多好的数据模型,最终都要编写函数
函数才是最终让CPU工作的本质。在面向过程编程中 软件等于数据结构+方法(函数) 在面向对象编程 强调软件就是对象组成。
软件最终是实现用户的需求,实现一系列功能,用户通过软件的功能实现用户的商业价值。所以编写软件的核心是功能,是行为,是函数。
所以编写代码的切入点应该是函数。面向过程先写函数名,规划要实现哪些功能,再定义函数。
面向对象 设计好对象后,同样先写该对象要实现哪些功能 再定义成员函数。
记住 :函数是写代码的切入点,起点,而不是数据结构;
函数可大可小,可复杂可简单,大到一个系统、一个组件,有的复杂的系统对外就提供几个API。简单到只是简单的语句。
不管咋样 函数 一定要符合以下原则:
1.单一职责    
     一个函数只做一件事,注意与一个对象只做一件事的区别
     OO设计原则里的单一职责强调一个对象只做一件高度相关的事,且是围绕对象所属的数据操作
     细化到对象的成员函数 需要继续细粒度花,每个函数做一件事,哪怕是get/set
     记住 具体的东西易变化,所以具体的事要粒度小,以后才改动小。
2.高内聚低耦合
    函数的依赖要减少,与其他对象 模块 少直接联系;独立性强
3.接口抽象,实现具体 如果函数是提供对外调用的,那抽象的粒度就要大点,如果仅仅是内部用的粒度要小点
   抽象变化小,具体变化大
4.简化接口  明确输入输出 返回值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分而治之是一种常用的算法思想,可以用来解决最大子列和问题。在这种方法中,我们将问题分解成更小的子问题,并在每个子问题上递归地应用该方法。然后,我们将子问题的解合并起来,形成原始问题的解。 下面是使用分而治之方法解决最大子列和问题的Python代码: ```python def max_subarray_sum(arr, low, high): # 递归终止条件,当只有一个元素时返回该元素 if low == high: return arr[low] # 分治法的分解步骤,将问题分解为更小的子问题 mid = (low + high) // 2 left_max = max_subarray_sum(arr, low, mid) right_max = max_subarray_sum(arr, mid + 1, high) # 分治法的合并步骤,将子问题的解合并得到原始问题的解 cross_max = max_crossing_sum(arr, low, mid, high) # 返回左子数组最大子列和、右子数组最大子列和和跨越中点的最大子列和中的最大值 return max(left_max, right_max, cross_max) def max_crossing_sum(arr, low, mid, high): # 计算包含中点的左侧最大子列和 left_sum = float("-inf") curr_sum = 0 for i in range(mid, low - 1, -1): curr_sum += arr[i] if curr_sum > left_sum: left_sum = curr_sum # 计算包含中点的右侧最大子列和 right_sum = float("-inf") curr_sum = 0 for i in range(mid + 1, high + 1): curr_sum += arr[i] if curr_sum > right_sum: right_sum = curr_sum # 返回左侧最大子列和、右侧最大子列和和跨越中点的最大子列和的和 return left_sum + right_sum # 测试代码 arr = [-2, 11, -4, 13, -5, -2] max_sum = max_subarray_sum(arr, 0, len(arr) - 1) print(max_sum) ``` 这段代码通过递归地将问题分解为更小的子问题,并在每个子问题上应用该方法。然后,它将子问题的解合并起来,得到原始问题的解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值