当我们要计算一个圆的面积?
C语言:
double PI=3.1415926;
typedef struct Circle
{
double radius;
}Circle;
double calcArea(Circle *circ)//传指针!比较小!
{
return PI*circle->radius*circle->radius;
}
主程序专门有一个文件的!
头文件本质:抽象掉只有外面要使用的东西!是一种接口。
steps:
1. 抽象出一个概念
2. 要抽象一个什么样的结果
抽象的结果是其能提供什么能力,而不是什么数据。
对象是有状态的-不同的具体的值
若一个对象没有状态-very interesting
类的名字、状态、行为
缺省的构造函数:当你没有任何构造函数,编译器会去帮你生成一个
写默认构造函数的情况:本身有默认值
动态对象创建才写缺省构造函数,没有的话就不写了。
默认构造函数不能有返回值(只能返回这个类型的)
默认值:对所有引用类型为空(当程序帮你生成构造函数)。
(但很容易出问题捏)
不初始化就不能用!使用类中函数之前进行初始化。
一样的行为:使用static!
(每一组实例有一组状态:不能用static)
ztg:要布置一个任务,有一个可能空的东西,那得把你们气死
(ztj:拍手大笑)(回忆起了zyq lab的痛苦回忆)
防止空指针:Optional-语言设计是个bug
class 里面可以不赋初值,但局部变量里面必须赋初值!
静态和全局类似。
C语言要释放内存(不然内存会泄露)
Best Thing of Java: Garbage Collection
随机数发生器:Random().
Random.nextInt()
val r3=Random(3)
时间:Date()
没有带static的:实例变量(圆的半径一定是和一个特定的圆有关系的)
带static的:全局变量
静态的:写类的名字来区分
属性和行为绑定
属性和方法是非静态的,全局/常量的才使用static
Mar.19th
可见性:对另一组可见?
封装:(1)我&非我 (2)package (3)继承关系
private:只有自己能看到 public:所有人可见
啥都没写:package 可访问
能漂亮地编出来时,给外面看到的越少越好
内部的静态和非静态方法都能访问
传参数给方法:直接传
java只能传值,因为其没有指针!
其他只能传引用
设计数据类型,可能设计只能使用引用类型(比如说自己设计一个数组-打个包放进去,自己做)
基本数据类型放进去会自动变成引用类型!
构造出引用,无需缺省构造函数
构造私有属性,但可以在外面放set
静态变量:引用静态名字才能看到
指明引用不可变:加final
Thinking in Objects
抽象和封装
eg:
抽象:圆就是要获取面积和周长
封装:把不要的东西都藏起来
类之间的关系:聚合和组合
eg:大楼中有多个房间,房间中有多个桌子
删掉Building删掉Room
删掉Room的时候要搬走桌子,不然会给警告
对象组合:
互相引用:组合成更大的对象
继承
扔一个便捷(oop写法的)随机数:
return getRandomCharacter(range[index][0],range[index][1]);
//封装成类->对象化!作为对象传来传去
public class RandomCharGenerator
{
public static RangedCharGenerator digit=new RangedCharGenerator('0','9');
//为什么是static:全局函数,与当前类并没有很多关系
}
这样比较安全,不容易因为奇怪的输入导致报错
oop:如何compose?
返回location或点的集合