//猜数字 猜 = 创建 全自动猜数字();
猜.猜(); //第 7 行 逆@风@者
}
}
类 猜数字
{
私有 整数 内定数字 = 66; //TODO: 随机选择一个数 //第 13 行
公开 猜()
{
循环 (猜数字() == 假) //第 17 行
{
}
}
私有 逻辑 猜数字()
{
控制台.输出行("请猜1-100中的一个数:");
整数 数 = 获取数字();
控制台.输出(数);
如果(数 == 内定数字) //第 28 行
{
控制台.输出行("猜对了,恭喜!!");
返回 真;
}
如果(数 > 内定数字) //第 34 行
控制台.输出行("太大了,再来一次。 ");
否则
控制台.输出行("太小了,再来一次。 ");
返回 假; //第 39 行
}
扩展 整数 获取数字()
{
返回 控制台.输入整数();
}
}

类 全自动猜数字 <基类 = 猜数字> //第 49 行
{
整数 当前数字 = 0;
扩展 整数 获取数字()
{
当前数字++; //第 55 行
返回 当前数字;
}
}
编译方法:将以上代码存为“猜数字.ef”文件(编码为UTF-8),然后执行以下命令行:
ec 猜数字.ef -ecl_name="程序" -starter_cls="启动类" -out_mode=runable -out=猜数字.exe
第 6 分钟:基本语法
第 1 行,定义类,“公开”“类”为关键字(注:“公开”“扩展”“私有”“静态”等在白皮书中被称为属性,其实与关键字等同,下面不再明确区分);“//”为注释的开始,直至本行结束(另一种多行注释形式是“/* ... */”)
第 3 行,定义类成员方法“启动()”,其含义等同于C/C++或Java中的“main()”,或C#中的“Main()”
第 5 行,定义类型为“猜数字”的变量“猜”,创建类型为“猜数字”的对象,并将创建后的对象赋值给变量“猜”(即变量“猜”引用了该对象)
第 7 行,调用“猜”(严格的说是“变量‘猜’所引用的对象”)的成员方法“猜()”
第 13 行,定义一个“私有”的、数据类型为“整数”的类成员变量“内定数字”,并指定初始值为66
第 17 行,“循环”语句,只要小括号内的条件(“猜数字()”返回值为“假”)成立,就循环执行花括号中的代码,直至小括号内的条件不成立时结束循环。“循环”等同于C/C++/Java/C#中的“while”
第 28 行,“如果”语句,判断两个变量“数”和“内定数字”的值是否相等,相等则执行后面花括号中的代码
第 34 行,“如果 - 否则”语句,判断变量“数”的值是否大于“内定数字”的值,大于则执行第35行,否则执行第37行
第 39 行,“返回”语句,结束本方法,并返回相应的值(此处为“假”)
第 49 行,定义一个类“全自动猜数字”,并指定其“基类”为“猜数字”
第 55 行,将变量“当前数字”的值自增1,即在原有值的基础上加1
第 7 分钟:面向对象
现实世界是由万事万物(对象)组成的。在程序中以对象的概念抽象地描述和表达现实世界中的万事万物,这就是面向对象的设计思想。
基于前面的“猜数字”源代码,这里简单讲一下面向对象中的“封装”“继承”和“多态”的概念。
看一下“猜数字”这个类,其数据成员“内定数字”是“私有”的,其方法成员“猜数字()”也是“私有”的,也就是说,它们对外界来说是不可见的,也就是说,它们被严格限制只能在“猜数字”这个类内部使用。既然不能被类外面的代码直接操作,那么这个类就保持了相对的独立性。“获取数字()”这个成员方法是“扩展”的,即它允许外界(子类)有条件的使用。只有成员方法“猜()”是“公开”的,允许外界任意使用。通过“私有”“扩展”“公开”机制,类既对外隐藏了实现细节,同时又对外公开了操作接口。这就是“封装”的概念。
本文章更多内容:<<上一页 - 1 - 2 - 3 - 4 - 下一页>> |