当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

《斯坦福:编程方法学》笔记

发表于: 2012-07-25   作者:braveCS   来源:转载   浏览次数:
摘要: 1)面向对象思想的引入       本课程最初说明如何用Java编写的一个小程序的运行操作。是一个叫karel机器人的程序,提供几个方法供用户使用。在课程里面把karel说成是一种语言,命令就是karel类提供的几个公共方法。若需要用到karel没提供的动作命令,则可以自己创建新的命令。这样刚开始的时候,就把编程理解成是对象的相互操作,给后面向对
1)面向对象思想的引入
      本课程最初说明如何用Java编写的一个小程序的运行操作。是一个叫karel机器人的程序,提供几个方法供用户使用。在课程里面把karel说成是一种语言,命令就是karel类提供的几个公共方法。若需要用到karel没提供的动作命令,则可以自己创建新的命令。这样刚开始的时候,就把编程理解成是对象的相互操作,给后面向对象思想做预备。
      以前学C语言的时候,不是面向对象,而是面向过程。导致后来面向过程的思想根深蒂固,结果变成是用面向对象语言写的面向过程的程序。现在最新体会是面向对象时解耦后的面向过程。

2)逻辑错误
OBOB:off by one bug 差一错误
infinite loop:无限循环
调试:简单化、条理化、假设、严谨、冷静。bad value|faulty logic|unwantted assumption.

3)注释:
注释代码做了什么,最好包括前置条件pre-condition和后置条件post-condtion,说明程序的运行状态。不管代码多还是少,注释会使代码具体化、清晰化

4)分解:逐步求精:自顶向下
      思考问题一般都是从抽象层面开始,想整体后细节。把大步骤一步一步分解到小步骤,直到原语的层次(计算机可以理解)。原语的一般标准:1-15行代码,解决一个问题,还要有一个容易理解的名称。
     不管是面向对象还是面向过程都会用到逐步求精。


[5)loop and a half
while(true){..... break;.....}


6)Java虚拟机栈:Java方法执行的内存模型,通常所说的栈内存(另一个堆内存)
     ppt演示方法调用画出Java方法执行运行时栈帧结构。每个方法被执行的时候都会同时创建一个栈帧用于存储局部变量表、操作数栈、动态链接(指向运行时常量池中该栈帧所属方法的引用,用于支持方法调用过程中的动态链接多态)、方法返回地址(包括正常完成出口和异常完成出口)、附件信息(如调试信息)等信息。 ——来自周志明《深入理解Java虚拟机》片段
    调用函数时,会把当前方法栈帧中的操作数栈中的值传递给调用函数的方法栈帧中的局部变量表,栈中存放的是基本类型数据和对象的引用。
    Java垃圾回收指堆中对象的回收,栈中的数据会在方法结束时弹出。堆中的对象根据一定规则标识为可达或不可达,在垃圾回收器根据垃圾回收算法回收不可达对象。

7)private
①信息隐藏,使用户不用关心类里面的具体结构
②控制访问对象变量,例如:可以返回一个字段的副本防止原版被修改


8)减少判断使用默认值

private int factorial(int n)
{
     int result=1;
     for(int i=1;i<=n;i++)
        result*=i;
     return result;     
}


9)包装类,String对象不变性
String类的任何操作都会造成重新创建一个新的对象,代替原来的对象。基本类型的包装类也一样也具有不变性,其包含的基本类型不会被改变,只能是重新生成一个新的对象存放改变后的值。除了包装类自带的常量池除外。如果改变后的基本类型能在常量池中找到就不重新创建新的对象,而是将常量池中的对象返回。

10)数组初始化
Java静态语言-->Java数组也是静态的:当数组被初始化后,该数组的长度是不可变的。初始化Java数组的2种方式: ①静态初始化:初始化时显示指定每个数组元素的初始值,由系统决定数组长度; ②动态初始化:初始化时只指定数组长度,由系统为数组元素分配初始值。

public class Cs 
{		
	public static void main(String[] args)
	{
		int[] m=new int[3];	
		System.out.println(m[1]);			//0	
		System.out.println(m);    			//[I@c3c749
		System.out.println(int[].class);	//class [I 所以数组会自动初始化
		System.out.println(int.class);		//int
		//length不是类的属性字段,对应java指令码  arraylength 获得数组的长度值并压入栈顶
		int n=m.length;			 
	}	
}

public class Cs 
{		
	public static void main(String[] args)
	{
		Hah a=new Hah();
		Hah b=new Hah();
		b.haha="ddddd";
		Hah[] m=new Hah[]{a,b,null,null};
		Hah[] m1={a,b};
		Hah[] m2=new Hah[3];
		Hah[] m3=new Hah[3]{a,b,null}; //error
		System.out.println(m[1].haha);
	}	
}

《斯坦福:编程方法学》笔记

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
这门《编程方法学》的课程已经看了两集了,虽然到目前为止还都是基础知识,但看起来还是很有趣的。
判断一句话中有多少个词——types和token两种不同的计数标准 例句1:I do uh main ‐ mainly busine
这节主要讲一些语言学的东西,一开始是lemmatization。 lemmatization:将词形变换转(inflections
编辑距离 完全是常识了,不用多说,看看视频中给出的例子: 星号×被称为一个gap,就是空。d表
前面几节都是在探讨命名实体识别的问题,上一节给出用来分类器可以使用的一些特征,word shape之类
上一节说了手工建立模式的过程,以及其优缺点,这一节该讲更通用的监督学习了。 教授首先提到在监督
动态规划求解最小编辑距离 以序列 INTENTUON(X)和序列 EXECUTION(Y)为例 初始化:X的前i个字符
Inverted Index是信息抽取里最常用的数据结构,来看看他长啥样: Brutus指向数字X则代表X号文档中包
"AND"类的查询处理 假设有上述的Inverted Index结构,现在的问题是要找出两个同时包含了Brutus和Cae
光计算出了最小编辑距离还不够,还需要知道两个序列的对应关系,即字符之间是怎么对应的(alignment
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号