1. 程式人生 > >9th week blog(History of Program)

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