9th week blog(History of Program)

object的发展史:

一.面向对象的发展史。(分为三个阶段)

(一)初级阶段

  20世纪60年代挪威计算中心开发的Simula 67,首先引入了类的概念和继承机制,它是面向对象语言的先驱。该语言的诞生是面向对象发展史上的第一个里程碑。随后20世纪70年代的CLU、并发Pascal、Ada和Modula2等语言对抽象数据类型理论的发展起到了重要作用,它们支持数据与操作的封装。犹他大学的博士生Alan Kay设计出了一个实验性的语言Flex,该语言从Simula 67中借鉴了许多概念,如类、对象和继承等。1972年Palo Alno研究中心(PARC)发布了Smalltalk72,其中正式使用了“面向对象”这个术语。Smalltalk的问世标志着面向对象程序设计方法的正式形成,但是这个时期的Smalltalk语言还不够完善。

(二)完善阶段

  PARC先后发布了Smalltalk72、76和78等版本,直至1981年推出该语言完善的版本Smalltalk80。Smalltalk80的问世被认为是面向对象语言发展史上最重要的里程碑。迄今绝大部分面向对象的基本概念及其支持机制在Smalltalk80中都已具备。它是第一个完善的、能够实际应用的面向对象语言。但是随后的Smalltalk的应用尚不够广泛,其原因是:
1)追求纯OO的宗旨使得许多软件开发人员感到不便。
2)一种新的软件开发方法被广泛地接受需要一定的时间。
3)针对该语言的商品化软件开发工作到1987年才开始进行。 

(三)现阶段

  从20世纪80年代中期到90年代,是面向对象语言走向繁荣的阶段。其主要表现是大批比较实用的面向对象编程语言的涌现,例如 C++、ObjectiveC、Object Pascal、CLOS(Common Lisp Object System)、Eiffel和Actor等。这些面向对象的编程语言分为纯OO型语言和混合型OO语言。混合型语言是在传统的过程式语言基础上增加了OO语言成分形成的,在实用性方面具有更大的优势。此时的纯OO型语言也比较重视实用性。现在,在面向对象编程方面,普遍采用语言、类库和可视化编程环境相结合的方式,如Visual C++、JBuilder和Delphi等。面向对象方法也从编程发展到设计、分析,进而发展到整个软件生命周期。
到20世纪90年代,面向对象的分析与设计方法已多达数十种,这些方法都各有所长。目前,统一建模语言(Unified Modeling Language,UML)[9]已经成为世界性的建模语言,适用于多种开发方法。把UML作为面向对象的建模语言,不但在软件产业界获得了普遍支持,在学术界影响也很大。在面向对象的过程指导方面,目前还没有国际规范发布。当前较为流行的用于面向对象软件开发的过程指导有“统一软件开发过程” [6] (也有人称为RUP)和国内的青鸟面向对象软件开发过程指导等。
当前,面向对象方法几乎覆盖了计算机软件领域的所有分支。例如,已经出现了面向对象的编程语言、面向对象的分析、面向对象的设计、面向对象的测试、面向对象的维护、面向对象的图形用户界面、面向对象的数据库、面向对象的数据结构、面向对象的智能程序设计、面向对象的软件开发环境和面向对象的体系结构等。此外,许多新领域都以面向对象理论为基础或作为主要技术,如面向对象的软件体系结构、领域工程、智能代理(Agent)、基于构件的软件工程和面向服务的软件开发等。

二.JavaScript发展史,JavaScript概念。
1.1 、JS发展史:
山寨打败原创(微软,网景)
1.1.1、1995年,表单验证。
1.1.2、Netscape(网景),布兰登(Brendan Eich)
1.1.3、标准:ECMAScript (国际标准化组织及国际电工委员会 )

1.2、JS的概念:
网页交互、客户端脚本语言(与服务端脚本语言不同)
1.2.1、JS是一种专为与网页交互而设计的客户端脚本语言。
1.2.2、程序是有序的指令的集成。
1.2.3、JS 是一种具有面向对象能力的、解释型的程序设计语言。
1.2.4、基于对象和事件驱动并具有相对安全性的客户端脚本语言。
1.2.5、不需要在一个语言环境下运行,只需要支持它的浏览器。

1.3、JS的作用:
验证发往服务器端的数据、增加 Web互动、加强用户体验度等.
1.3.1、表单验证
1.3.2、用户互动
1.3.3、网页特效

1.4、运行平台:
IE,firefox(火狐),chrome(谷歌),欧朋,苹果等浏览器。

1.5、客户端脚本语言的特点
JS脚本语言的特点:
1.5.1、脚本语言。解释型、逐行进行解释。
1.5.2、基于对象。基于对象、可以创建对象,可能使用现有的对象。 
1.5.3、简单。弱类型的变量类型,对使用的数据类型无严格要求。
1.5.4、动态性。采用事件驱动,不用经过服务器可对用户的输入做出响应。
访问网页时,鼠标在网页中进行鼠标点击或上下移、窗口移动等操作,JS可直接对这些事件给出相应的响应。
1.5.5、跨平台性。不依赖于操作系统,仅需要浏览器的支持。
JS可以在任意机器使用,前提机器上浏览器支持JSt脚本语言,大多数的浏览器都支持JS脚本语言。

2、JavaScript的组成。
2.1、JS由三部分组成。
ECMAScript、BOM、DOM
2.1.1、核心 : ECMAScript
欧洲计算机制造商协会
2.1.2、BOM
2.1.2.1、浏览器对象模型
2.1.2.2、Browse Object Model,
2.1.2.3、提供与浏览器交互的方法和接口(API),
2.1.2.4、利用BOM控制浏览器显示页面以外的部分。
2.1.3、DOM
2.1.3.1、文档对象模型
2.1.3.2、Document  Object Model,
2.1.3.3、提供访问和操作网页HTML内容的方法和接口。

2.2:JavaScript 和 ECMAScript
2.2.1、含义相同。
2.2.2、JavaScript 的含义 比ECMA-262 中规定的多。

2.3、编辑工具和运行平台
2.3.1、编辑工具
HBuilder,Dreamweaver,sublime Text,Notepad++,文本等..
2.3.2、运行平台
IE,firefox(火狐),chrome(谷歌),欧朋,苹果等浏览器。

3、JavaScript的标签。
3.1、标签
3.1.1、文件引入
<script type=" 文件类型 " src=" 路径 " ></script>
3.1.1.1、 
3.1.1.1.1、 type 脚本语言的类型 type = text/javacript
3.1.1.1.2 、src 要引入的外部文件 src = " 路径 "
3.1.1.2、注意:
3.1.1.2.1、不可以使用单标。
3.1.1.2.2、不可以在引入了外部文件的标签中写代码。

3.1.2、代码
alert( " 每句话后面要写分号结束! " ) ;
3.1.3、 
document.write( " 可以输出任何HTML的代码 " );

3.2、JS与HTML的执行顺序
3.2.1、从上朝下,谁在前先执行谁,无特殊需求。
3.2.2、JS代码一般写在<head>与</head>中间,也可在html文件的任何地方。
3.2.3、可以出现多个JS标签。

3.3、JS的注释
3.3.1、单行注释 //
3.3.2、多行注释 /* */

4、JS的数据类型,变量。
4.1、字面量、直接量。
程序中直接显示的数据
4.1.1、数字字面量 Number : 100
4.1.2、字符串字面量 String :" 张三 "
4.1.3、布尔字面量 Boolean : false / true
4.1.4、正则表达式字面量 : /abc/gi
4.1.5、对象字面量为空 Object : null
4.1.6、对象字面量表达式 Object :{x:1, y:2}
4.1.7、数组字面量表达式 Array :[1,2,3,4,5]

4.2、变量的定义
4.2.1、使用 var
 var age;       //var 是关键字,age是变量名
4.2.2、 赋值:age = 20;
4.2.3、 定义的同时赋值: var age=20;
4.2.4、可以一次定义多个变量:
var name=“zhangsan", age=18,weight=108;
4.2.5、JS是弱数据类型,容错性较高, 赋值后才确定数据类型
var temp;             // temp 时啥数据类型?不确定 
temp = 12;             // temp 变量是数字类型
temp = “hello”;      // temp 变量变成了字符串类型
alert(typeof temp); // typeof 判断数据类型

4.2.6、关键字和保留字

4.2.7、标识符和命名规范
4.2.7.1、标识符
JS定义的符号,即:变量名、函数名等。
4.2.7.1.1、 标识符组成
任意的大小写字母、数字、下划线(_)和美元符 ($)。
4.2.7.1.2、不能以数字开头。
4.2.7.1.3、不能有关键字和保留字。
4.2.7.1.4、区分大小写。
例:age和Age表两个不同的变量。
强烈不建议使用同一个单词的大小写区分两个变量。

4.7.2、变量的命名
4.7.2.1、匈牙利命名法。见名知意
4.7.2.2、驼峰命名法。

4.8、数据类型
4.8.1、Boolean:  布尔类型
4.8.2、Number:数值类型、数字(整数,浮点数float)
4.8.3、String:字符串类型
4.8.4、Array:数组类型
4.8.5、Object:对象类型
4.8.6、Null、Undefined:特殊类型 
4.8.7、NaN:非数值类型
4.8.8、Function:函数类型

4.9、typeof
typeof 操作符用来检测值或变量的数据类型。
返回类型有:
undefined   未定义
boolean     布尔值
string         字符串
number       数值
object         对象、数组或者null 
function     函数
array 数组

4.10、Undefined 类型
4.10.1、只有一个值,undefined 。
4.10.2、使用 var 声明变量,无初始化,变量值为 undefined 。
例:var box;
alert(box);//undefined
4.10.3、定义变量,声明的同时赋值 。

4.11、Null 类型
只有一个值,null 。
表示一个空对象引用(指针),而 typeof 操作符检测 null 会返回 object 。
例:var box = null;
alert(typeof box);

4.12、Undefined 与 Null 的关系。
4.12.1、null (父母)派生 undefined(子女),
ECMA-262 规定
当 undefined == null 即值相等时,则 返回 true。
4.12.2、数据类型不同。
null 返回是 Object类型
undefined 返回是 undefined 类型。
例:var box;
var car = null;
alert(typeof box == typeof car); // 值相等,类型不同

4.13、Boolean 类型
4.13.1、两个值(字面量):true和false。
true = 1,false = 0。
4.13.2、JS区分大小写,所以True 和 False 或者其他都不是 Boolean 类型的值。
例:var box = true;
alert(typeof box);
4.12.3、Boolean 可以将一个值转换为 Boolean 值,可以使用转型函数Boolean()。
var hello = " Hello World! ";
var hello2 = Boolean(hello);
alert(typeof hello2);
4.12.3.1、Boolean 类型转换规则
String: 非空字符串为true,空字符串为false 。
Number: 非0数值为true,0或者NaN为false 。
Object: 对象不为null,则为 true,null为false 。
Undefined: undefined 为 false 。

4.13、Number 类型
包括:整型、浮点型。
4.13.1、整型
例:var box = 100; // 十进制整数
alert(box);
4.13.2、浮点类型
必须包含一个小数点,且小数点后面必须至少有一位数字
例:var box = 0.8;
var box = .8; // 有效,不建议

5、运算符的简单使用。
5.1、算术运算符。
+(加)、-(减)、*(乘)、/(除)、%(取余,求模)
5.2、字符串和变量的拼接。
+
5.3、关系运算符。
>(大于)、<(小于)、>=(大于等于)、<=(小于等于)、
==(等等于,值相同)、===(全等于,值和类型都相同)、
!=(不等于,值不同)、!== (不全等于,值和类型都不同)
5.4、逻辑运算符。
与(且)&&、或 ||、非 !
5.5、赋值运算符。
+=(加等于)、-=(减等于)、*=(乘等于)、
/=(除等于)、%=(取余等于,求模等于)
5.6、自增和自减。
++a(先加)、a++ (后加)
--a、a--

5.7、类型转换
字符串转换数字类型:parseInt( )、parseFloat( )
parseInt( )       是把其它类型转换为整型;
parseFloat( )  是把其它类型转换为浮点型(小数)
四舍五入Math.round(78.566)--->78

6、进制转换。
6.1、内存
就是大量的开关,每个开关,
可以存储一个1或0,称为一位(1bit),
每八位称为1字节(1byte)
1byte = 8位 
1KB  = 1024byte  
1MB = 1024KB       
1GB = 1024MB     
1TB = 1024GB     
...
1PB, 1EB
1位:是二进制的0或者1
6.2、二进制: 0, 1 (0~1)
6.3、八进制: 0, 1, 2, 3, 4, 5, 6, 7 (0~7)    
6.4、十进制: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 (0~9)
6.5、十六进制: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F (0~15)
6.6、进制的转换
6.6.1、常用值: 2的次方
2^2 = 4   2*2
2^3 = 8   2*2*2=8
2^4 = 16  2*2*2*2=16
2^5 = 32
2^6 = 64
2^7 = 128
2^8 = 256
2^9 = 512
2^10 = 1024
2^11 = 2048

6.6.2、2进制的转换
2进制:101011
转10进制:(从右往左)
1*2º + 1*2¹ + 0*2^2 + 1*2^3 +0*2^4 + 1*2^5 = 1+2+0+8+0+32 = 43
转8进制:(从右往左3个一组 101 011):53   
转16进制:(从右往左4个一组 0010 1011):2B

6.6.3、10进制的转换
10进制:43
转2进制:32+8+2+1 = 101011
转16进制:32+11 = 2B
转8进制:40+3 = 53

6.6.4、8进制的转换
8进制:53
转10进制:5*8¹ + 3*8º = 43

6.6.5、16进制的转换
16进制:2B
转10进制:2*16¹ + 11*16º = 32+11 = 43
8进制和16进制转非10进制,
可以先转换成10进制,再由10进制转
--------------------- 
第二个发展史参考与CSDN
原文:https://blog.csdn.net/qq_36781893/article/details/71321405 

三.atan2(y,x)和pow(x,y)的意思。

1.atan2(y,x)

     atan2(y, x)是4象限反正切,它的取值不仅取决于正切值y/x,还取决于点 (x, y) 落入哪个象限:

         a.当点(x, y) 落入第一象限时,atan2(y, x)的范围是 0 ~ pi/2;

         b.当点(x, y) 落入第二象限时,atan2(y, x)的范围是 pi/2 ~ pi;

         c.当点(x, y) 落入第三象限时,atan2(y, x)的范围是 -pi~-pi/2;

         d.当点(x, y) 落入第四象限时,atan2(y, x)的范围是 -pi/2~0. 

2. pow(x,y)

    函数pow(x,y)实现运算x^y,即x的y次方,这里x和y都为整数。

    算法的基本思想是,减少乘法次数,重复利用结算结果,例如:
x^4,如果逐个相乘的话,需要四次乘法。如果我们这样分解(x^2)*(x^2)就只需要2两次乘法,因为x^2的结果我们可以重复利用。所以我们最好做对称的分解指数y,然后求x^(y/2)的平方。

资源来源:https://www.cnblogs.com/lbjiu/p/9900903.html

猜你喜欢

转载自www.cnblogs.com/shengbowen1004/p/9977807.html
9th