數據結構與數據類型

數據結構與數據類型

數據類型是面向應用領域的具體化,同時面向計算機系統底層是爲了確定分配的內存容量的大小。
在C,JAVA等靜態類型的編程語言中,編譯器根據數據類型,提前在內存的進程的棧中分配特定
大小的空間。C 的malloc,和Java的new是動態分配大塊內存的,提前在內存的進程的堆中分配
計算過的內存空間。

javascript 等動態數據類型的編程語言中,並不需要聲明數據類型,根據賦值情況,在解釋器解釋
執行代碼中,動態得到相關的數據類型。

靜態類型的語言,數據類型有嚴格的檢查,程序不容易出錯,執行性能也好,但是在編程中不夠靈活
編程的抽象層次不夠,因爲有不少的應用,程序只有在實際的執行階段才能最終確定數據的類型。
在這方面,C採用void *的返回類型來解決。Java和 C++等面向對象的編程語言使用泛類型的編程語法
來解決,這就是Java程序員津津樂道的反射技術。

在javascript ,python等動態類型的語言中,必須由程序員負責數據類型的強制轉換,編程錯誤,
比較隱諱不易發現。

數據類型在編程的過程中,有一個數據的表示範圍的問題,如果超出了範圍,有數據溢出的問題。
這在系統底層的數學函數庫的開發中,是一個重要的問題。

常規的整型,浮點型,數組,列表等類型僅能滿足常規的分配內存的需求。對於像進程控制塊這樣的
複雜結構,還有ip協議的數據包的結構,需要用C語言的struct ,Java的class等抽象的數據類型進行
描述。在多個元素構成集合的情況下,數據類型是元素的一個屬性。
元素之間的關係有線性關係與非線性關係,線性關係包括數組,鏈表。非線性關係包括樹和圖。
數組等數據結構不要求元素的唯一性,不要求元素的有序性。
集合要求元素的唯一性。再加上有序性是有序集合。

數據結構的重要作用,一個是設計內存中的數據分佈的作用,方便數據的存取與操作。另一個作用是數據
的封裝作用。這能有效的限制變量的作用域爲一個特定的小範圍內。在編程中,優先使用局部變量,全局
變量雖然在編程的時候,使用真得很方便,但它的副作用太大,例如有模塊耦合問題,變量命名重複問題等。
C的struct,java的class 都能有效地實現,數據的封裝。還能把相關的操作,一起封裝起來,這是很重要的
編程進步。在C中把函數指針作爲結構體的變量,來實現封裝數據結構的操作。在java中用類的方法的方式,
把它封裝起來。

C++ 與java等面向對象的編程語言都提供了類的繼承,這是爲什麼呢?因爲類與類之間有很多的屬性與方法是
相同的。爲了代碼上的複用,編譯器提供了相關的代碼處理機制,實現了屬性與方法只在父類中定義,在子類中
直接引用。這是有明顯的編程開發上的好處的,類的繼承機制,十分符合現實世界中的可繼承的現象。
但它的問題是編譯後的可執行程序龐大而十分冗餘,內存佔用極大,而且內存不易回收再利用。很容易存在內存泄漏的問題。 在使用C語言開發操作系統的蠻荒時代,內存泄漏問題就是一個頑疾。在java編程語言開發企業應用時
內存泄漏還是一個值得警惕的問題。雖然內存已經變得很龐大了。硬件的高性能只能掩蓋問題,不能根治問題。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章