Java編程思想 學習筆記1

一、對象導論

1.抽象過程
  Alan Kay曾經總結了第一個成功的面向對象語言、同時也是Java所基于的語言之一的Smalltalk的五個基本特性,這些特性表現了純粹的面向對象程序設計方式
  1)萬物皆對象
  2)程序是對象的集合,它們通過發送消息來告知彼此所要做的。要想請求一個對象,就必須對該對象發送一條消息。更具體的說,可以把消息想象為對某個特定對象的方法的調用請求。
  3)每個對象都有自己的由其他對象所構成的存儲。換句話說,可以通過創建包含現有對象的包的方式來創建新類型的對象。
  4)每個對象都擁有其類型。按照通用的說法,“每個對象都是某個類(class)的一個實例(instance)”。每個類最重要的區別于其他類的特性就是“可以發送什么樣的消息給它”。
  5)某一特定類型的所有對象都可以接收同樣的消息

?2.每個對象都有一個接口
  所有對象都是唯一的,但同時也是具有相同的特性和行為的對象所屬類的一部分。
  每個對象都只能滿足某些請求,這些請求由對象的接口(interface)所定義。接口確定了對某一特定對象所能發出的請求。但是,程序中必須有滿足這些請求的代碼。這些代碼和隱藏的數據一起構成了實現

3.每個對象都提供服務

  將對象想象成是”服務提供者“。這樣做的好處之一:有助于提高對象的內聚性。高內聚是軟件設計的基本質量要求之一:這意味著一個軟件構件的各個方面”組合“的很好。

  我們經常遇到的問題是,將過多的功能都塞在一個對象里。在良好的面向對象設計中,每個對象都可以很好地完成一項任務,但是它并不試圖做更多的事。

4.被隱藏的具體實現

 將程序開發人員按照角色分為**類創建者**和**客戶端程序員**。客戶端程序員的目標是收集各種用來實現快速應用開發的類。類創建者的目標是創建類,這種類只向客戶端程序員暴露必需的部分,而隱藏其他部分。

訪問控制的第一個存在原因就是讓客戶端程序員無法觸及他們不應該觸及的部分,讓他們清晰地應用服務;第二個原因就是允許庫設計者可以改變類內部的工作方式而不用擔心影響到客戶端程序員。

5.復用具體實現
  組合:使用現有的類合成新的類,經常被視為”has-a”關系。
  創建新類時優先選擇組合。

?6.繼承

  可以創建一個基類型來表示系統中某些對象的核心概念,從基類型中導出其他類型,來表示此核心可以被實現的各種不同方式。
  所有可以發送給基類對象的消息同時也可以發送給導出類對象。由于通過發送給類的消息的類型可知類的類型,所以這也就意味著導出類與基類具有相同的類型
  有兩種方法可以使基類與導出類產生差異。第一種:直接在導出類中添加新方法。這意味著基類不能滿足你的所有需求,因此必須添加新方法;第二種是改變基類的方法,即覆蓋(override)
  “是一個”與“像是一個”關系
  is-a:繼承只覆蓋基類的方法,結果可以用一個導出類對象來完全替代一個基類對象。被視為純粹替代。
  has-a:新類型具有舊類型的接口,但還包含其他方法,基類無法訪問新添加的方法。

7.伴隨多態的可互換對象
  在處理類型的層次結構時,通常想把一個對象不當作它所屬的特定類型來對待,而是將其當作其基類的對象來對待。這樣我們能編寫出不依賴特定類型的代碼。
  一個非面向對象編程的編譯器產生的函數調用會引起所謂的前期綁定,這意味著編譯器將產生對一個具體函數名字的調用,而運行時將這個調用解析到將被執行的代碼的絕對地址。
  面向對象程序設計語言使用了后期綁定的概念。當對象發送消息時,被調用的代碼直到運行時才能確定。編譯器確保被調用方法的存在,并對調用參數和返回值執行類型檢查,但是并不知道將被執行的確切代碼。為了執行后期綁定,Java使用一小段特殊的代碼來代替絕對地址調用。這段代碼使用在對象存儲的信息來計算方法體的地址。這樣,根據這一小段代碼的內容,每一個對象都可以具有不同的行為表現。當向一個對象發送消息時,該對象就能夠知道這條消息應該做些什么。
  把導出類看做是它的基類的過程稱為向上轉型

8.單根繼承結構
  所有類都繼承自Object。
  單根繼承結構保證所有對象都具備某些功能。
  單根繼承結構使垃圾回收器的實現變得容易得多。

9.容器
  存儲不定數量的對象。
  參數化類型
  Java SE5之前,容器存儲的對象都只具有Java中的通用類型:Object。因為Object可以存儲一切東西。但這種做法在涉及具體應用時則很危險,因為向下轉型是不安全的,程序員需要花更多精力來處理正確的轉型。
  參數化類型機制則可以解決此問題。參數化類型就是一個在編譯中可以自動定制作用于特定類型上的類。稱之為范型。

10.對象的創建和生命期
  怎樣才能知道何時銷毀這些對象?當處理完某個對象之后,系統某個部分可能還在處理它。
  對象的數據位于何處?怎樣控制對象的生命周期?這里有兩種方式:

  • 第一種是追求效率,對象的存儲空間和生命周期可以在編寫程序時確定,通過將對象置于堆棧(它們有時被稱為自動變量或限域變量)或靜態存儲區域內來實現。
  • 第二種是在被稱為堆的內存池中動態地創建對象。這樣,直到運行時才知道需要多少對象、生命周期以及具體類型。

  因為存儲空間是在運行時被動態管理的,所有需要大量的時間在堆中分配存儲空間,這可能要遠遠大于在堆棧中創建存儲空間的時間。在堆棧中創建存儲空間和釋放空間通常各需要一條匯編指令即可,分別對應將棧頂指針向下移動和將棧頂指針向上移動。創建堆存儲空間的時間依賴于存儲機制的設計。

  動態方式有這樣一個一般性的邏輯假設:對象趨向于變得復雜,所以查找和釋放存儲空間的開銷不會對對象的創建造成重大沖擊。
  Java完全采用了動態內存分配方式。每當想要創建新對象時,就要使用new關鍵字來構建此對象的動態實例。
  對于允許在堆棧上創建對象的語言,編譯器可以確定對象的存活時間,并可以自動銷毀它。然而,如果是在堆上創建對象,編譯器就會對它的生命周期一無所知。因此,Java提供了被稱為“垃圾回收器”的機制,它可以自動發現對象何時不再被使用,并繼而銷毀它。

11.異常處理:處理錯誤
  大多數錯誤處理機制的主要問題在于,它們都依賴于程序員自身的警惕性,這種警惕性來源于一種共同的約定,而不是編程語言所強制的。
  異常處理直接把錯誤處理直接置于編程語言中,有時甚至置于操作系統中。
  注意,異常處理并不是面向對象語言的特征。

12.并發編程
  在計算機編程中有一個基本概念,就是在同一時刻處理多個任務的思想。許多程序設計問題都要求,程序能夠停下正在做的工作,轉而處理某個其他問題,然后再返回主進程。
  我們只需把任務切分成多個可獨立運行的部分,從而提高程序的響應能力。在程序中,這些彼此獨立運行的部分稱之為線程,上述概念被稱為“并發”。
  但有一個隱患:共享資源。如果有多個并行任務都要訪問同一項資源,那么就會出問題。解決問題的方法是:某個任務鎖定某項資源,完成其任務,然后釋放資源,使其他任務可以使用這項資源。

13.Java與Internet
待補。。。。看不懂

14.總結

  Java程序中只包含以下兩部分內容:用來表示問題空間概念的對象(而不是有關計算機表示方式的相關內容),以及發送給這些對象的用來表示在此空間內的行為的消息

  這一章的內容很廣泛,還需要全面學習之后再回來總體把握精髓。

轉載于:https://www.cnblogs.com/fht-litost/p/8306870.html

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

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

相關文章

不只是日志收集,項目監控工具Sentry的安裝、配置、使用

前言上一篇文章介紹了ExceptionLess這個日志收集系統:ExceptionLess的安裝、配置、使用由于ExceptionLess官方提供的客戶端只有.Net/.NetCore平臺和js的,本文繼續介紹另一個日志收集系統:SentrySentry 是一個實時事件日志記錄和聚合平臺。&am…

64個數據分析常用術語

導讀:本篇文章,我們來講講數據分析常用語。 內容綜合整理自網絡 01 絕對數和相對數 絕對數:是反應客觀現象總體在一定時間、一定地點下的總規模、總水平的綜合性指標,也是數據分析中常用的指標。比如年GDP,總人口等等。…

redis 的bitmap 開源包 bitmapist的應用

2019獨角獸企業重金招聘Python工程師標準>>> 原理:http://my.oschina.net/u/1458120/blog/545224 bitmap包:https://github.com/Doist/bitmapist 要求redis> 2.6.0 bitmapist-master.zip 安裝自己下載解壓 python setup.py install &…

Django Views(視圖函數)

http請求中產生兩個核心對象: http請求:HttpRequest對象 http響應:HttpResponse對象 所在位置:django.http 之前我們用到的參數request就是HttpRequest 檢測方法:isinstance(request,HttpRequest) 1 HttpRequest對象…

Android 4 +https(如何啟動TLS1 1 and TLS1 2)

之前用的網絡請求框架是鴻洋的OkHttpUtils,網絡請求在5.0手機上使用https沒有問題,但是最近突然使用了一個4.4的系統,就報錯SSLException ....咋地咋地 然后 我們的副總給我們找一個博客,如何解決4.系統出現的這個問題&#xff0…

massCode 一款優秀的開源代碼片段管理器

本文將介紹一款適合程序員使用的個人代碼片段管理工具 massCode[1]。massCode小時候,也許我們每個人都會被老師要求有一個到處摘錄優美句子段落的作文素材本 —— 采蜜集。不可否認,這對我們的寫作水平的提高確實有很大的幫助。對開發人員來說當然也需要…

【ArcGIS Pro微課1000例】0021:Win10系統ArcGIS Pro3.0.1安裝教程(附ArcGIS Pro下載)

本文講解Win10系統上ArcGIS Pro3.0.1安裝教程,附軟件包下載。 文章目錄 一、 軟件安裝步驟1. 安裝.net Runtime 62. 安裝ArcGIS Pro3. 安裝中文語言4. 刪除代理二、軟件下載地址一、 軟件安裝步驟 [軟件名稱]: ArcGIS Pro 3.0.1 [軟件大小]:4.33GB [安裝環境]: Win 11/Win …

iOS逆向工程——非越獄調試

其實iOS的逆向分析業界已經十分成熟了,網上也有許多有趣的嘗試(一步一步實現iOS微信自動搶紅包(非越獄)。本文著重于如何在非越獄機器上進行調試,出于學習及總結的目的,記錄于此。 本文以破解游戲夢幻西游為例,逐步講解整個調試流…

[轉]2022 Flutter 宣布發布 Windows 正式版

原文鏈接: https://medium.com/flutter/announcing-flutter-for-windows-6979d0d01fed 自從推出 Flutter 以來,我們一直專注于為漂亮的定制應用提供跨平臺解決方案,這些應用被編譯為機器代碼并充分利用設備的底層圖形硬件功能。 今天這一愿景…

電腦經常彈出“不支持的硬件”解決辦法

電腦經常彈出“不支持的硬件”解決辦法。 通過微軟官方查證,這是由于以上處理器需要最新的Windows10系統才會這樣子的,而大多出現該提示的都安裝了Win7或是Win8.1系統。 來至微軟官方的說明 此錯誤出現的原因是各代新處理器要求最新Windows版本以獲得支持。 例如,Windows 1…

使用 Web API 上傳和下載多個文件

原文作者:Jay Krishna Reddy原文鏈接:https://www.c-sharpcorner.com/article/upload-and-download-multiple-files-using-web-api/翻譯:沙漠盡頭的狼(谷歌翻譯加持,文中版本使用.NET 6升級)---正文開始---…

詳解T-SQL的聯接機制

T-SQL的聯接分三種類型: 交叉聯接 ( cross join ) 內部聯接 (inner join) 外部聯接 (outer join) 每種聯接在邏輯上經歷不同的階段,分為笛卡爾乘積、篩選、添加外部行,如圖: 聯接類型 階段 交叉聯接 笛卡兒乘積 內部聯接…

Android FrameWork學習(一)Android 7 0系統源碼下載 編譯

最近計劃著研究下 Android 7.0 的系統源碼,之前也沒做過什么記錄,這次正好將學習的內容記錄下來,方便以后復習鞏固。 既然要學習我們的系統源碼,那我們第一步要做的就是下載源碼并進行編譯了。 #硬件環境要求 ###1. 編譯環境 按照…

【MapGIS精品教程】002:GDB本地數據庫的使用

本文主要內容為MapGISGDB本地數據庫的使用,包括:GDB企業管理器的認識、GDB本地數據庫的創建方法、GDB本地數據庫的備份和恢復。 1. GDB企業管理器的認識 GDB是地理數據的資源管理器,主要對空間數據進行有序組織與管理。 GDB數據管理包括&…

RabbitMQ學習3----運行和管理RabbitMQ

1.服務為管理 Erlang天生就是為了讓應用程序無需知道對方是否存在同一臺機器上即可互相通信。 Erlang節點:Erlang虛擬機的每個實例。多個Erlang應用程序可以運行在同一個節點之上。節點之間可以進行本地通信(不管他們是運行在同一臺服務器之上&#xff0…

各代移動網絡性能

摘自《中國元宇宙白皮書》 下載整書完整版https://www.aliyundrive.com/s/gXQvRLM22kD

EFCore高級Saas系統下單DbContext如何支持不同數據庫的遷移

前言隨著系統的不斷開發和迭代默認的efcore功能十分強大,但是隨著Saas系統的引進efcore基于表字段的多租戶模式已經非常完美了,但是基于數據庫的多租戶也是可以用的,但是也存在缺點,缺點就是沒有辦法支持不同數據庫,mi…

poj 1679: The Unique MST【次小生成樹】

題目鏈接 參考博客 希望注釋足夠清楚。。歡迎指出不足~ #include<cstdio> #include<cstring> #include<algorithm> using namespace std;const int maxn110; const int INF0x3f3f3f3f;int n,m; int mp[maxn][maxn]; int maxlen[maxn][maxn]; //maxlen…

51. Python 數據處理(2)

1.Python 修改excel文件import xlrd import xlutils.copy excelr xlrd.open_workbook("hello.xlsx") excelw xlutils.copy.copy(excelr) sheet1 excelw.get_sheet(0) sheet1.write(3, 5, "xlutils.copy test test") excelw.save("hello.xlsx"…

人工智能十大流行算法

導讀&#xff1a;本文為有志于成為數據科學家或對此感興趣的讀者們介紹最流行的機器學習算法。 作者&#xff1a;Fahim ul Haq 譯者&#xff1a;劉志勇&#xff0c;策劃&#xff1a;趙鈺瑩 來源&#xff1a;InfoQ&#xff08;ID&#xff1a;infoqchina&#xff09; 機器學習是…