面向對象語言的技術特點

1.支持類與對象概念的機制

所有面向對象語言都允許用戶動態創建對象,并且可以用指針引用動態創建的對象。允許動態創建對象,就意味著系統必須處理內存管理問題,如果不及時釋放不再需要的對象所占用的內存,動態存儲分配就有可能耗盡內存

有兩種管理內存的方法:
一種是由語言的運行機制自動管理內存,即提供自動回收“垃圾”的機制;
另一種是由程序員編寫釋放內存的代碼

2.實現整體-部分(即聚集)結構的機制

一般說來,有兩種實現方法:
(1)使用指針
(2)獨立的關聯對象
實現整體-部分結構。大多數現有的面向對象語言并不顯式支持獨立的關聯對象,在這種情況下,使用指針是最容易的實現方法,通過增加內部指針可以方便地實現關聯。

3.實現一般-特殊(即泛化)結構的機制

既包括實現繼承的機制也包括解決名字沖突的機制。
所謂解決名字沖突,指的是處理在多個基類中可能出現的重名問題。
這個問題僅在支持多重繼承的語言中才會遇到。某些語言拒絕接受有名字沖突的程序,另一些語言提供了解決沖突的協議。不論使用何種語言,程序員都應該盡力避免出現名字沖突。

4.實現屬性服務的機制

對于實現屬性的機制應該著重考慮以下幾個方面:
支持實例連接的機制;屬性的可見性控制;對屬性值的約束。
對于服務來說,主要應該考慮下列因素:
支持消息連接(即表達對象交互關系)的機制;控制服務可見性的機制;動態聯編。
?所謂動態聯編,是指應用系統在運行過程中,當需要執行一個特定服務的時候,選擇(或聯編)實現該服務的適當算法的能力。

5.類型檢查

程序設計語言可以按照編譯時進行類型檢查的嚴格程度來分類。
如果語言僅要求每個變量或屬性隸屬于一個對象,則是弱類型的;
如果語法規定每個變量或屬性必須準確地屬于某個特定的類,則這樣的語言是強類型的。
?面向對象語言在這方面差異很大,例如,Smalltalk實際上是一種無類型語言(所有變量都是未指定類的對象);C++和Eiffel則是強類型語言。混合型語言(如C++、Objective_C等)甚至允許屬性值不是對象而是某種預定義的基本類型數據(如整數和浮點數等),這可以提高操作的效率。
強類型語言主要有兩個優點
一是有利于在編譯時發現程序錯誤
二是增加了優化的可能性
通常,
使用強類型編譯型語言開發軟件產品
使用弱類型解釋型語言快速開發原型
總地說來,強類型語言有助于提高軟件的可靠性和運行效率,現代的程序語言理論支持強類型檢查,大多數新語言都是強類型的。

6.類庫

大多數面向對象語言都提供一個實用的類庫。某些語言本身并沒有規定提供什么樣的類庫,而是由實現這種語言的編譯系統自行提供類庫。存在類庫,這為實現軟件重用帶來很大方便。
類庫中往往包含實現通用數據結構(例如,動態數組、表、隊列、棧、樹等)的類,通常把這些類稱為包容類。在類庫中還可以找到實現各種關聯的類。
更完整的類庫通常還提供獨立于具體設備的接口類(例如,輸入輸出流),此外,用于實現窗口系統的用戶界面類也非常有用,它們構成一個相對獨立的圖形庫。

7.效率

許多人認為面向對象語言的主要缺點是效率低
一個原因是,某些早期的面向對象語言是解釋型的而不是編譯型的
事實上,使用擁有完整類庫的面向對象語言,有時能比使用非面向對象語言得到運行更快的代碼。這是因為類庫中提供了更高效的算法和更好的數據結構。
另一個原因是,這種語言在運行時使用動態聯編實現多態性,這似乎需要在運行時查找繼承樹,以得到定義給定操作的類。
事實上,絕大多數面向對象語言都優化了這個查找過程,從而實現了高效率查找。

8.持久保存對象

任何應用程序都對數據進行處理,如果希望數據能夠不依賴于程序執行的生命期而長時間保存下來,則需要提供某種保存數據的方法。希望長期保存數據主要出于以下兩個原因:?
(1) 為實現在不同程序之間傳遞數據,需要保存數據;
(2) 為恢復被中斷了的程序的運行,首先需要保存數據
一些面向對象語言(例如C++),沒有提供直接存儲對象的機制。這些語言的用戶必須自己管理對象的輸入輸出,或者購買面向對象的數據庫管理系統。
另外一些面向對象語言(例如Smalltalk),把當前的執行狀態完整地保存在磁盤上。還有一些面向對象語言,提供了訪問磁盤對象的輸入輸出操作。
通過在類庫中增加對象存儲管理功能,可以在不改變語言定義或不增加關鍵字的情況下,就在開發環境中提供這種功能。然后,可以從“可存儲的類”中派生出需要持久保存的對象,該對象自然繼承了對象存儲管理功能。這就是Eiffel語言采用的策略。

9.參數化類

所謂參數化類,就是使用一個或多個類型去參數化一個類的機制。
有了這種機制,程序員就可以先定義一個參數化的類模板(即在類定義中包含以參數形式出現的一個或多個類型)
然后把數據類型作為參數傳遞進來,從而把這個類模板應用在不同的應用程序中,或用在同一應用程序的不同部分。
Eiffel語言中就有參數化類,C++語言也提供了類模板。

10.開發環境

軟件工具和軟件工程環境對軟件生產率有很大影響。
編譯程序或解釋程序是最基本、最重要的軟件工具。
在開發大型系統的時候,需要有系統構造工具和變動控制工具


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/452066.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452066.shtml
英文地址,請注明出處:http://en.pswp.cn/news/452066.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

INI 文件的操作

在程序中經常要用到設置或者其他少量數據的存盤,以便程序在下一次執行的時候可以使用,比如說保存本次程序執行時窗口的位置、大小、一些用戶設置的數據等等,在 Dos 下編程的時候,我們一般自己產生一個文件,由自己把這些…

摩拜大數據殺熟?官方:老用戶押金的確退款延遲

近日,有媒體曝出摩拜單車一些老用戶出現押金難退現象。有的消費者點擊退款后,系統不斷奔潰;有的申請退款后,賬戶又莫名出現押金,就像未申請一樣;也有人終于提交了退款,等候數日卻遲遲不見到賬。…

Junit Test使用樣例

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 配置: 調用類: import java.util.List;import javax.annotation.Resource;import org.apache.shiro.crypto.Rand…

Django congtent types應用

contenttypes 是Django內置的一個應用,可以追蹤項目中所有app和model的對應關系,并記錄在ContentType表中。 每當我們創建了新的model并執行數據庫遷移后,ContentType表中就會自動新增一條記錄。比如我在應用app01的models.py中創建表class E…

網絡爬蟲--7.Handler處理器 和 自定義Opener

文章目錄一. 引言二. 簡單的自定義opener()三. ProxyHandler處理器(代理設置)四. Cookie1.Cookie原理2.Cookie應用五. cookiejar庫 和 HTTPCookieProcessor處理器1.案例一:獲取Cookie,并保存到CookieJar()對象中2.案例二:利用cook…

如何選擇面向對象語言

開發人員在選擇面向對象語言時,還應該著重考慮以下一些實際因素。 1. 將來能否占主導地位 為了使自己的產品在若干年后仍然具有很強的生命力,人們可能希望采用將來占主導地位的語言編程。 根據目前占有的市場份額,以及專業書刊和學術會議上所…

Unicode編碼及其實現:UTF-16、UTF-8,and more

本文主要討論Unicode的編碼與各種實現,著重討論UTF-16,UTF-8的實現規則,以及Big-endian和Little-Endian的存儲規則。 一、Unicode編碼 Unicode出現之前已經有各種編碼標準:ANSI、ISO8859-1、GB2312、GBK以及BIG-5等。Unicode試圖統…

Apache Tiles的使用 前配置

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 使用方法見&#xff1a; http://blog.csdn.net/jiangyu1013/article/details/53161580 1.加maven 依賴&#xff1a; <!-- 頁面布局…

day212223:線程、進程、協程

1、程序工作原理 進程的限制&#xff1a;每一個時刻只能有一個線程來工作。多進程的優點&#xff1a;同時利用多個cpu&#xff0c;能夠同時進行多個操作。缺點&#xff1a;對內存消耗比較高當進程數多于cpu數量的時候會導致不能被調用&#xff0c;進程不是越多越好&#xff0c;…

php課程 8-28 php如何繪制生成顯示圖片

php課程 8-28 php如何繪制生成顯示圖片 一、總結 一句話總結&#xff1a;gd庫輕松解決 1、php圖片操作生成的圖的兩種去向是什么&#xff1f; 一種在頁面直接輸出&#xff0c;一種存進本地磁盤 2、php操作圖片的庫有哪些&#xff1f; PHP: Image Processing and Generation - M…

代碼行技術

用代碼行技術估算軟件規模時&#xff0c;當程序較小時常用的單位是代碼行數&#xff08;LOC&#xff09;&#xff0c;當程序較大時常用的單位是千行代碼數&#xff08;KLOC&#xff09;。 代碼行技術的主要優點是&#xff0c;代碼是所有軟件開發項目都有的“產品”&#xff0c;…

網絡爬蟲--8.編碼趣聞

很久很久以前&#xff0c;有一群人&#xff0c;他們決定用8個可以開合的晶體管來組合成不同的狀態&#xff0c;以表示世界上的萬物。他們看到8個開關狀態是好的&#xff0c;于是他們把這稱為"字節"。 再后來&#xff0c;他們又做了一些可以處理這些字節的機器&#…

科技領域的一分鐘

各位果迷是否能想象在一分鐘之內&#xff0c;科技領域都會發生什么事情&#xff1f;——蘋果平均每分鐘賣出81部 iPad&#xff1b;在 iPhone 4S 發布后的第一個周末&#xff0c;每分鐘賣出925部 iPhone 4S&#xff1b;RIM每分鐘賣出103臺黑莓手機&#xff1b;Amazon每分鐘賣出1…

flavr—超級漂亮的jQuery扁平彈出對話框

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 插件描述&#xff1a;flavr是一個時尚的扁平彈出對話框為您的下一個網站。 flavr是響應設計布局&#xff0c;能夠適應任何屏幕大小。 得…

經緯度之間的距離計算

來自谷歌地圖的計算公式&#xff1a; 通過JAVA的Math類各種方法調用。實現上述公式 private static double EARTH_RADIUS 6378.137;// 單位千米/*** 角度弧度計算公式 rad:(). <br/>* * 360度2π πMath.PI* * x度 x*π/360 弧度* * author chiwei* param d* return* s…

在CentOS7阿里云服務器部署ThinkPHP5,并配置phpstrom實現同步開發(微信小程序及管理員后端)...

小程序和后端同步開發 1.服務器安裝tp5框架&#xff1a; 方法很多比如&#xff1a;github、linux命令直接手動下、composer 都可以&#xff0c;方法很多&#xff0c;百度一下&#xff0c;不再累述 2.這時你會發現怎么都訪問出現不了這個令人舒心的界面&#xff08;ok第一個坑到…

ER圖( 實體聯系圖)

E-R圖也稱實體-聯系圖(Entity Relationship Diagram)&#xff0c;提供了表示實體類型、屬性和聯系的方法&#xff0c;用來描述現實世界的概念模型。 它是描述現實世界概念結構模型的有效方法。是表示概念模型的一種方式&#xff0c;用矩形表示實體型&#xff0c;矩形框內寫明…

網絡爬蟲--9.正則表達式

文章目錄一. 正則表達式1.為什么要學正則表達式2.什么是正則表達式3.正則表達式匹配規則二. Python 的 re 模塊1.re 模塊的一般使用步驟2.compile 函數3.match 方法4.search 方法5.findall 方法6.finditer 方法7.split 方法8.sub 方法9.匹配中文10.貪婪模式與非貪婪模式1&#…

概念模型

將需求分析得到的用戶需求抽象為信息結構&#xff08;即概念模型&#xff09;的過程就是概念結構設計 概念模型的特點 &#xff08;1&#xff09;能真實、充分地反映現實世界&#xff0c;是現實世界的一個真 實模型。 &#xff08;2&#xff09;易于理解&#xff0c;從…

筆記本電池的正確使用方法

一、新買筆記本不需要激活&#xff0c;也不需要前三次的充電12小時深充深放&#xff0c;這主要是鋰電池的原理和特性決定的。電池設計有電量保護&#xff0c;不可能將電量完全用完&#xff0c;當然也不可能過度充電。 二、筆記本電池的壽命受周圍環境的影響很大&#xff0c;最好…