`
abcxo
  • 浏览: 32415 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

0.前序

 
阅读更多

0.前序

 

y2k综合征:

这个是什么意思,依照我对书的理解是这样的,也就是不要过早优化,因为我们的程序90%的代码占程序运行时间不到10%,我们通常依照自己的部分认识,认为这部分代码需要优化,认为这段代码会出现问题,所以导致后面修改,代码就出现了不稳定,其实这些都是没有必要的。我的做法通常是养成良好的编程习惯,然后在程序即将结束的时候再进行优化.

 

上下文和组合:

上下文,这个词在我编程了好久之后才知道是什么意思,我觉得可以这么理解,他是对复杂的环境的一种很概况的代表,比如说这个上下文他的背后是很复杂的设计模式,而上下文的提出也很好的简化了这个表面,从而我们可以使用组合,其中一个代表就是android里面的context.这是一个很有趣的东西

 

关于已检测异常:

这是一个很重要的点,有点颠覆了我的想法,文中是说我们现在使用异常捕获的习惯就像是把注意力放在了如何捕获异常,而不是使这个程序根本就没有异常,这是一个很重要的讨论,在我之前的项目中,无论是http还是pull我使用的都是写一个大的异常,然后捕获打印出来,然后就不理了,长此以往我习惯了这一点,不加思考的加异常捕获,习惯了这一点,而问题的核心是在代码中,我们需要解决这些异常,而不是去逃避这些(因为这些始终会浮现出来的),这些还会让你代码的可读性变差,所以该写就写,而且要想办法怎么解决这些异常.

 

 

 

 

模式概念:

设计模式帮助你从别人的成功经验而不是自己的失败经验中学到更多的东西。这句话我觉得太经典了,有些人失败了常说当是经验积累,但是有很多东西并不是一定要失败了才会懂的,这么说,一生都在失败也学不完这东西,so,总结自己和别人的经验,人生,失败几次就已经够你受的了,题外话

设计模式对我来说,是一种思路,另一种思维的颠覆,对人生的思考,太棒了,而他的目的就我而言也就在于低耦合高内聚,这是什么意思呢,比如说建一个房子,我可以把一堵堵的墙搬过来,然后骑起来,而设计模式提供给我们的思路是,打地基,使用水泥,一块块的砖头,当房子需要改建,只需换瓷砖就好了,更多的是,你这一套房子可以不做大的变化变成豪宅,变成别墅,酒店,钟点房,相同的东西没有必要重复,我也觉得这一点很对,经常两个很多部分相同的代码,但是却要重新写一遍,只是变量的名字变了一个而已,能否将这些不变的东西抽象出来呢,这就是设计模式的目的了..

 

 

 

相似的范畴:

惯用法:就是在代码中实现某种功能。

特定设计:解决某一特定问题提出的方法

标准设计:解决某类问题提出的方法,这个就类似我们平时写的工具类

设计模式:为了解决一大类问题而提出的问题,也就是在标准设计之上再抽象

 

设计原则:

这些原则是检测自己程序一个很好的测试吧

 

.尽量不要让人感到奇怪:意思就是你的设计为了追求特别而去特别

 

.使一般问题简单化,罕见问题行得通:这是一个很重要的思想,看起来简单,这是我一直坚持的东西,就比如 android,许多人喜欢自定义自己的view,一个视图就一个view,或者实现某种功能,但是我的理解是将现在拥有 的东西完全利用上就ok了,其实android的sdk已经能让你飞起来的了,不要重复制造轮子,使用最简单的方法解决 问题

 

.一致性:这是什么意思呢,保持风格一致性,这为你的代码重用性带来很多的帮助的,在一个案例中就是android开 发中ui设计是用来n多个不同的颜色,相同的界面却许多不同的颜色,这不但导致程序混乱,而且界面也很乱

 

.得墨忒耳法则:这个名字太奇怪了,得墨忒耳是希腊管理土地的神,这个法则是说不要和陌生人说话,也就是一个对 象最好只引用自己的属性(额,这个原则相信不可能办到吧)

 

.减法原则:当你不能从设计中去掉任何一个东西的时候,这个设计就完成了

 

.先简单后通用:要知道很多系统需要的通用性不高的,如果一味追求通用,那么就会衍生出一大堆的无用配置项,这 是没有必要的,所以先简单,后通用,而且简单的,往往是通用的,我恰好看到剃刀原则,我才意识到我犯了这个错 误之前一个方法,我追求一个类的通用性,为他配置了许多方法什么的,。但是才发现,许多方法根本用不上,。而 这个类也显得特别的臃肿.其实干脆就写几个类(实现同一个接口或者基类就好了).

 

.自反性:这一个词我在离散数学中接触过,好难表达,一个类对应一个抽象,这个原则也叫做同构,同构在化学中好 像是指两个相同的分子,只是组合不一样,然后导致了不一样的性质,我觉得这个原则想表达的意思可能是一个类有 一个自己对应的一个抽象.

 

.独立性:独立表达一个单独的想法,这个原则的意思其实就是我们用的最多的分离,封装,多态,通过这个把每一个部 分独立起来,实现高内聚,低耦合.

 

.一次且只能出现一次:这个在我现在的代码中,我慢慢用上了,当我写这个方法的时候,我第一步做的是不是马上开 始写,还是思考有没有其他东西会用到这个方法,或者有没有用到类似的方法,与我把他们都封装起来,通过简单的 参数配置就可以实现了一个方法满足一类相似的问题(注:其实这是很难把握的一个度,因为你如何确定这些是相类似 的方法,如果都统一起来,那么这个方法会变得效率低下,臃肿,所以我的原则就是能简单配置在一起的就配置在一 起,否则就不要勉强).

 

 

 

模式分类:

.创建型:包括创建对象,分离对象,这里一个很重要的point是,如何让你的代码脱离类型,不依赖类型编程,这个 就牵涉到之前学习的think in java 中的内部类等等知识,而且当加入新的类型,代码不需要改变,我们抽象一下这 句话的意思是,我有一个工厂,生产很多产品,然后接到订单,要生产玩具,但是我们的工厂器具不需要变,然后马 上就可以开始生产玩具.

 

.结构型:设计出满足某些工程特定约束的对象,我的理解是,他们的关系不变,这是重点,我和a君是朋友,当a君变 了性,我们还是朋友,我还是可以使用它的某样接口,这里我的一些想法就是保持接口稳定性,然后再进行内部优化.

 

行为型:指一个程序里处理一系列特定类型操作的对象。或者说他们封装了一系列的行为,例如迭代器,吧迭代这个 行为封装起来了。这一个是需要认真学习的,我毕竟接触的还不够.

 

 

当我读到这里,我深深的感受到什么是编程,感受到好久之前上的一节选修课软件工程,老师说:编程是不断的反映真实世界的思想。现在我能深深的感受到,无论是android,java还是c++,这些都是工具,而算法设计模式这些由哲学数学演变而来的伟大思想才是指导我们创造出美好的程序的根本,你对这个世界的理解,对生活的理解,所以我经常会说编程实质是完成一件艺术品,而编程者就是一名艺术家,不断的通过程序表达自己的思想..

分享到:
评论

相关推荐

    programs-cpp:编程也就那么回事儿

    0.前序遍历(递归&迭代&Morris) 1.中序遍历(递归&迭代&Morris) 2.后序遍历(递归&迭代&Morris) 3.层序遍历(递归&迭代) 1.重建 0.基于前序和中序遍历 0.基于中序和后序遍历 1.检索树 0.二叉检索树 1.伸展树 2.平衡...

    AlgorithmAndLeetCode#itcharge-LeetCode-Py#0889. 根据前序和后序遍历构造二叉树1

    只有二叉树中每个节点度为 2 或者 0 的时候,已知前序遍历序列和后序遍历序列,才能唯一地确定一颗二叉树,如果二叉树中存在度为 1 的节点时是无法唯一地确定一棵

    已知二叉树前序和中序,求后序

    * 已知二叉树前序和中序,求后序 * @param pre * @param mid * @param last * @param i */ public static int i =0;//i:表示要插入后序序列的位置对于生成的后序序列,应该从最后位置开始写, // 所以...

    CastleYeager#PythonicLeetcode#144. 二叉树的前序遍历1

    示例 1:输出:[1,2,3]示例 2:输出:[]示例 3:输出:[1]示例 4:输出:[1,2]示例 5:输出:[1,2]提示:树中节点数目在范围 [0, 1

    世界500强面试题.pdf

    1.3.7. n 个数字(0,1,…,n-1)形成一个圆圈 .................................................. 53 1.3.8. 定义 Fibonacci 数列 ...............................................................................

    史上最强全面解析SQLite

    目录 使用SQLite编程的快速介绍............................................................. 5 下载代码 .......................................................................... 5 创建一个新数据库 .......

    完全二叉树 满二叉树 二叉树遍历(前序、中序、后序).pdf

    满二叉树的前序遍历 1.概念 在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。二叉树的...

    二叉树的前序中序后序遍历代码

    用C语言实现数据结构中二叉树的前序中序后序遍历 int main()//主函数部分 { BiTree T=NULL; int Layer=0; int LayerT=0; printf("请输入二叉树:\n"); CreatBiTree(&T);printf("你输入的二叉树为:(竖型树状...

    二叉树递归的实现前序 中序 后序遍历

    //如果是空树,则返回0 } void PrintTree(BitTree Boot,int nLayer) //按竖向树状打印的二叉树 // { int i; if(Boot==NULL) return; PrintTree(Boot->RChild,nLayer+1); for(i=0;i;i++) printf(" "); printf...

    二叉树的遍历及通过前序中序遍历确定后序层序遍历

    程序运行后直接输入节点以0结束后可输出二叉树的4种遍历,然后再通过输入前序中序遍历确定后序层序遍历。

    第六章 树和二叉树作业及答案(100分).docx

    A B C D E 0 F 0 0 G H 0 0 0 X 结点D的左孩子结点为( )。 A.E B.C C.F D.没有 12.一棵“完全二叉树”结点数为25,高度为( )。 A.4 B.5 C.6 D.不确定 二、填空题(每空3分,共18分)。 1. 树的路径...

    二叉树的实现(前序,中序,后序)

    int i=0; BTnode *s[M]; do { while(t!=NULL) { s[i++]=t; t=t->lchild; } /*遍历左子树,同时入栈*/ if(i>0) { t=s[--i]; printf("%c",t->data); t=t->rchild; } }while(i>0||t!=NULL); }

    [详细完整版]数据结构原理.doc

    若一棵二叉树具有45个度为2的结点,6个度为1的结点,则度为0的结点个数是(46 )。 10.某二叉树的前序和后序序列正好相同,则该二叉树一定是什么样的二叉树(空或只有 一个结点)。 11. 在一个有向图中,所有顶点的...

    Win32 缓冲区溢出实战(PDF)

    一、前序 很多次被朋友邀请写篇关于在Win32下Exploit的文章。一来是因为此类文章中关于*nix 平台比较多,而Win32相对较少;二来是因为在Win32 中写exploit有些地方可能困难一点。以下我将用一个具体的简单例子,详细...

    数据结构(9).doc

    已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结 果为( A ) A. CBEFDA B. FEDCBA C. CBEDFA D.不定 7.设无向图的顶点个数为n,则该图最多有( B)条边。 有向图( A) A. n-1 B. n(n...

    二叉树的遍历与应用二叉链表

    function FirstOrderAccess0()功能:实现二叉树的前序遍历 二叉树前序遍历的思想: 从根节点开始,沿左子树一直走到没有左孩子的节点为止, 依次访问所经过的节点,同时所经[节点]的地址进栈; 当找到没有左孩子的...

    PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法

    本文实例讲述了PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法。分享给大家供大家参考,具体如下: 先来看看前序遍历、中序遍历与后序遍历原理图: ...=count($inorder) || count($preorder)==0

    山东大学软件学院数据结构实验六堆和搜索树

    1、 输入一系列不为零的正整数(最多不超过20个),遇到0代表输入结束(不包含0)。 2、 根据上面输入的数据序列,用初始化方法创建最大堆(不要用节点依次插入的办法创建最大堆),然后输出最大堆的层次序列。 3、 ...

    数据结构实验-二叉树的建立、遍历、摩斯电码(哈夫曼树)的编码与解码实验代码

    1. 小明会按照前序的方式输入一棵二叉树。例如,输入$ACG##H##D##BE#I##F##的话,代表了下面这棵树: 2. 请分别按照前序、中序、后序输出这棵树。 选做部分 背景 在影视剧中,我们经常会看到二战期间情报人员使用...

    数据结构(C++)有关练习题

    <br>实验四 综合(课程设计) 内容及步骤: 1、假定一维数组a[n]中的每个元素值均在[0,200]区间内,用C++编写一个算法,分别统计出落在[0,20],[21,50],[51,80],[81,130],[131,200]等各区间内的元素...

Global site tag (gtag.js) - Google Analytics