1.面向對象基礎
1.1 基本概念
方法重載是函數名字相同,參數列表不同
組成
????????即組合,指整體與部分的關系,整體與部分生命周期相同
聚合
????????關聯關系的一個特例,是體現整體與部分,即使has-a的關系,此時整體與部分是可以分離的,具有不同的生命周期,部分可以屬于多個整體對象,也可以為多個整體對象共享。聚合對象是指一個對象包含其他對象。
特征:封裝、繼承、泛化
對象基本概念:
? ? ? ? +:public
? ? ? ? #:protected,同包或子類可以訪問
????????default,同包可以訪問
? ? ? ? -:private,只有內部的方法可以訪問
? ? ? ?
對象的特性:
? ? ? ? 1,良好定義的行為
? ? ? ? 2,清晰的邊界? ? ? ?
? ? ? ? 3,可拓展性
面向對象方法:Booch方法、Coad方法和OMT方法
????????對象的狀態包括這個對象的所有屬性(通常是靜態)以及每個屬性當前的值(通常是動態的);對象的行為代表了其外部可見的活動;操作代表了一個類提供給它的對象的一種服務
封裝:
? ? ? ? 概念:封裝是指將邏輯上相關的數據以及行為綁定在一起,使信息對使用者隱蔽的方法叫“封裝”
? ? ? ? 組成:對象名、屬性、行為(方法)
? ? ? ? 消息來自于外界,是通過 接口 與封裝的對象 進行信息傳遞
? ? ? ? 在面向對象軟件開發中,封裝是一種信息隱藏技術,其目的是使得對象的使用者和生產者分離。
類:組成:類名、數據成員、成員函數
類是具有相同屬性和服務的一組對象的集合
類的分類:
? ? ? ? 1.實體類(數據類):現實世界真實存在的實體,有大量屬性;比如人
? ? ? ? 2.接口類(功能類、邊界類、interface):為用戶提高系統合作交互的方式,有大量的方法;接口類分為人和系統兩大類;其中人的接口可以是顯示屏、窗口、web窗體、對話框、菜單、列表框、其他顯示控制、條形碼、二維碼或者用戶與系統交互的其他方法;系統接口涉及把數據發送到其他系統,或者從其他系統接收數據;
? ? ? ? 3.控制類:描述業務邏輯,用來控制活動流,充當實體類和接口類之間的協調者
????????父類又稱超類、泛類
? ? ? ? 子類是父類的特殊化,父類是子類的泛化
? ? ? ? java不支持二義性(子類不能擁有兩個父親,即使多重多態,使用多重多態容易造成子類中存在二義性的成員)?
? ? ? ? 繼承是類之間的一種關系,在定義和實現一個類的時候,可以在一個已經存在的類的基礎上進行,繼承用于在已存在的類的基礎上創建新類。
多態:? ? ? ??
????????重寫,父類與子類之間的不同表現(2個類),
????????重載發生在一個類之間的不同表現(1個類)
? ? ? ? 過載多態:一個名字在不同的上下文中所代表 的含義不一樣,重載是屬于這樣的一種表現。
? ? ? ? 多態:同一個操作作用于不同的對象,可以有不同的解釋,產生不同的執行結果。在運行時,可以通過指向基類的指針,來調用實現派生類中的方法。同一消息可以調用多種不同類的對象的方法,這些類有某個相同的超類。
? ? ? ? 在面向對象方法中,多態指客戶類無需知道所調用方法的特定子類的實現。在使用時,用戶發送一個通用的消息,而實現的細節則有由于接受對象自行決定。
? ? ??在面向對象方法中,支持多態的是動態綁定。
????????動態綁定:運行時;是指過程調用和響應調用所需執行的代碼在運行時加以結合
????????靜態綁定:編譯時;是過程調用和響應調用所需執行的代碼在編譯時加以結合
????????動態綁定和多態:要有繼承關系、要發生了重寫、要有【父類引用】指向【子類對象】
? ? ? ?參數多態和包含多態稱為通用多態,過載多態和強制多態稱為特定多態
????????參數多態:應用廣泛、最純的多態。采用參數化模板(函數模板或類模板),通過給定不同的類型參數,使得一個結構有多種類型。
? ? ? ? 包含多態:同樣的操作可用于一個類型及其子類型(不是子類)。包含多態一般需要進行運行時的類型檢查
????????過載多態:同一個名(操作符、函數名)在不同的上下文中所代表的含義不同
? ? ? ? 強制多態:編譯程序通過語義操作,把操作對象的類型強行加以變換,以符合函數或操作符的要求
? ? ? ?
總結:?
對象:屬性(數據)+方法(操作)+對象ID
? ? ? ? 封裝:隱藏對象的屬性和實現細節,僅對外公開接口(信息隱藏技術)
類(實體類、控制類、邊界類):
? ? ? ? 接口:一種特殊的類,它只有方法定義沒有實現
繼承和泛化:復用機制(單重繼承和多重繼承)
? ? ? ? 重置/覆蓋:在子類中重重新定義已經定義的方法
? ? ? ? 重載:一個類可以有多個同名而參數不同的方法
多態:不同對象收到同樣的消息產生不同的結構
? ? ? ? 過載多態:同一個名字在不同的上下文所代表的含義不同
1.2?面向對象設計7大原則?
2、UML
2.1 UML圖的概念以及分類
? ? ? ? 交互圖:序列圖、通訊圖、交互圖和定時圖
? ? ? ? 類圖和對象圖區別:最上面那行如果有冒號,就是對象圖(對象圖是”某一時刻一組對象以及他們之間的關系“)。
? ? ? ? 序列圖和通信圖是站在代碼的角度去看待的,活動圖是站在業務邏輯的角度去看待
? ? ? ? 組件,和系統的模塊是一樣的。
? ? ? ? ?部屬圖是唯一一個跟硬件有關的
? ? ? ? 在關聯上可以標注重復度(表示一個類的實例能夠與另一個類的多少個實例相關聯)和角色。兩個類之間可以有多個關聯,但這些關聯需要不同的角色進行標識
2.2 類圖
類圖中的關系:
代碼實現舉例:
? ? ? ? 關聯:getB(),getA()
? ? ? ? 依賴:A{? ?xy(Bb){}? ? }?
? ? ? ? 泛化:父子類;特殊/一般關系
? ? ? ? 聚合:一對多的關系;整體和部分的生命周期不同
? ? ? ? 組合:一對多的關系;整體和部分的生命周期相同 ;組合的關系比聚合緊密一點,比如汽車報廢,車上的零件就全廢了 ;B{list(A)}? ? ? ?
? ? ? ? 實現:接口和類之間的關系。
2.3 用例圖中的關系
????????用例圖之間的關系(之前考過文字概念):
? ? ? ? 包含:<<include>>、拓展:<<extend>>、
2.4 各類圖的學習
2.4.1 類圖和對象圖
? ? ? ? 對象圖跟類圖很像,除名字那邊,類圖的名字是類名,對象圖的名字的“類名? :? 對象名“,所以要區分只要看名字就可以了。
2.4.2 用例圖
? ? ? ? 用例圖描述一組用例、參與者以及他們之間的關系
? ? ? ? 用例之間的關系:包含關系、拓展關系、泛化關系
? ? ? ? 用例建模的流程:1.識別參與者(必須) 2.合并需求獲得用例(必須) 3.細化用例描述(必須) 4.調整用例模型(可選)
2.4.3 協作圖(通訊圖)
? ? ? ? 強調的是發送和接收信息的對象之間的組織結構,
組成元素有:
? ? ? ? 1,對象
? ? ? ? 矩形表示,前面為對象名后面為類名,表示類的一個實例
? ? ? ? 2,鏈接
? ? ? ? ?兩個對象間用單一線條表示,用來表示在通訊圖中的關聯,目的是讓不同的消息在不同系統對象之間傳遞
? ? ? ? 3,消息
? ? ? ? 通訊圖中對象之間通信的方式,
2.4.4 活動圖
? ? ? ? 組成:活動狀態和動作狀態、轉換和對象
? ? ? ? 活動圖可以有開始、結束和一系列動作,可以表示分支(條件叫做【監護表達式】)、合并、分岔和會合
3、面向對象開發技術
? ? ? ? 采用面向對象開發技術,對象是系統運行時基本實體。它包括數據(屬性),也包括作用與數據的操作(行為)。一個對象通常由 對象名、屬性和操作 三部分組成
? ? ? ? 在面向技術中,不同的對象在收到同一消息時可以產生完全不同的結果,這一現象稱之為多態,它通過繼承機制來支持。在運行時,可以通過指向基類的指針來調用實現派生類中的方法。如果一個語言只支持類而不支持多態,只能說它是基于對象,但不是面向對象
4、面向對象程序設計(面向對象開發流程)
????????(考的有點多,也有點偏)
? ? ? ? 在采用面向對象開發系統時,主要步驟有:面向對象分析、面向對象設計、面向對象程序設計、面向對象測試
? ? ? 面向對象分析主要強調問題是什么,描述軟件要做什么,不關心解決方案。面向對象設計側重問題的解決方案,并且要考試技術和方面的細節
? ? ? ? 面向對象分析主要包括:認定對象(名詞)、組織對象(抽象成類)、描述對象間的相互作用、定義對象的操作、定義對象的內部信息。目的是為了獲得對應問題的理解,確定系統的性能功能要求。最重要的也是分析第一步是確定問題域
? ? ? ? 面向對象設計是設計分析模型和實現相應的源代碼。
? ? ? ? 面向對象程序設計選擇合適的面向對象設計語言,將程序組織為相互協作的對象集合,每個對象表示某個類的實例,類通過集成等關系進行組織,
? ? ? ? 面向對象測試是盡可能早的進行系統測試,以發現系統中可能存在的錯誤并進行修復,進而保證系統質量
? ? ? ? xml:可擴展標記語言,是標準通用標記語言的子集,是一種用于標記電子文件使其具有結構性的標記語言
????????HTML更適合處理靜態網頁、
????????prolog是邏輯型程序設計語言
? ? ? ? LISP是一種函數式編程語言
? ? ? ? python是一種面向對象。解釋型計算機程序設計語言? ? ?
? ? ? ? C++面向對象的編譯型語言
5、設計模式
5.1 順口溜
? ? ? 設計模式有點多,順口溜記得比較牢固一點,下面這段是別人編的順口溜(原文鏈接:https://blog.csdn.net/HAN_789/article/details/131477285),要是記不住的話可以找下其他人的:
創建模式下: 工廠模式,原型模式,單例模式,建造者模式,抽象工廠模式
創公園,但見愁
結構模式:享元模式,外觀模式,組合模式,適配器模式,代理模式,裝飾模式,橋接模式
姐想外租,世代裝橋
行為模式:狀態模式,責任鏈模式 ,中介模式,模板方式模式,訪問者模式,解釋器模式,備忘錄模式,觀察者模式,策略模式,命令模式,迭代模式
行狀折中模仿,戒備觀測鳴笛
創公園,但見愁
姐想外租,世代裝橋行狀折中模仿,戒備觀測鳴笛
————————————————版權聲明:本文為博主原創文章,遵循 CC 4.0 BY 版權協議,轉載請附上原文出處鏈接和本聲明。? ? ? ? ? ?? ? ? ? ?
5.2 三種類型的模式?
? ? ? ? 創建型模式又分為對象創建型模式和類創建型模式。對象創建型模式處理對象的創建,類創建型模式處理類的創建。詳細的說,對象創建型模式把對象創建的一不過推遲到另一個對象中,而類創建模式將它的對象的創建推遲到子類中
? ? ? ? 結構型模式涉及如何組合類和對象以獲得更大的結構,即通過多個類個對象來實現更復雜的結構
? ? ? ? 行為型模式包括類行為模式和對象行為模式,用于描述程序在運行時復雜的流程控制,即描述多個類和對象之間怎樣相互協作共同完成單個對象都無法單獨完成的任務,它涉及算法與對象之間職責的分配
5.3 創建者模式
工廠方法Factory:
? ? ? ? 定義一個用于創建對象的接口,讓子類覺得將哪一個類進行實例化,使得一個類的實例化延遲到子類,
? ? ? ? 適用:
? ? ? ? 1.當一個類希望由它的子類來指定它所創建的對象時
? ? ? ? 2,當一個類不知道它所必須創建的對象的類的時候
? ? ? ? 3,當類將創建對象的職責托付給多個幫助子類中的某一個,并且希望將哪一個子類是代理者這一信息局部化
原型模式Prototype:
? ? ? ? 用原型實例指定創建對象的種類,并且通過拷貝這個原型來創建新的對象
? ? ? ? 適用:
? ? ? ? 1,當一個系統應該獨立于它的產品創建、構成、表示時
? ? ? ? 2,當要實例化的類是在運行時刻指定時,例如通過動裝載
? ? ? ? 3,為了避免創建一個與產品層次平行的工廠類層次時
? ? ? ? 4,當一個類的實例只能有幾個不同的狀態組合中的一種,建立相應數目的原型并克隆他們可能比每次用合適的狀態手工實例該類更加方便
? ? 單例設計模式singleleton:
????????保證一個類僅有一個實例,并提供訪問這個唯一實例的全局訪問點。
? ? ? ? 適用:
? ? ? ? 1,當類只能有一個實例而且客戶從一個總所周知的訪問點訪問它時、????????
? ? ? ? 2,當這個唯一實例應該是通過子類化可擴展的,并且客戶應該無需更改代碼就能拓展實例時
建造者Builder:
? ? ? ? 將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示
? ? ? ? 適用:
? ? ? ? 1,當創建復雜對象的算法應該獨立于該對象的組成部分以及他們的裝配方式時
? ? ? ? 2,當構造過程必須允許被構造的對象有不同的表示時
5.4 結構型模式
適配器模式:
? ? ? ? 適用:想使用一個已經存在的類,而它的接口不符合要求描述的是適配器
代理模式
? ? ? ? 通過提供與對象相同的接口來控制對這個對象的訪問,以使得在確實需要這個對象時才能對他進行創建和初始化
裝飾模式:
? ? ? ? 適用:在不影響其他對象的情況下,以動態透明的方式給單個對象添加職責描述
橋接模式Bridge:
? ? ? ? 判斷:該設計模式將抽象部分與實現部分分離(抽線于實現部分的關系是——>),使他們都可以獨立的變化
? ? ? ? 適用:不希望再抽象與實現部分之間有一個固定的判定關系的是橋接模式
????????基于類的最小設計原則,通過使用封裝、聚合以及繼承等行為讓不同的類承擔不同的職責。
5.5 行為性模式
狀態模式state:
????????允許一個對象在其內部狀態改變時改變它的行為,對象看起來似乎修改了它的類。如自動售賣機,根基狀態的不同可以又不同的行為? ??
責任鏈模式chain of responsibility:
????????通過給多個對象處理請求的機會,減少請求的發送者與接收者之間的耦合,將接收對象鏈接起來,在鏈中傳遞請求,直到有一個對象處理這個請求
? ? ? ? 適用:
? ? ? ? 1.有多個對象可以處理一個請求,哪個對象處理該請求運行時刻自動確定
? ? ? ? 2,想在不明確指定接收者的情況下向多個對象中的一個提交請求
? ? ? ? 3,可處理一個請求的對象集合應該被動態指定
中介者模式Mediator:
? ? ? ? 屬于行為型對象模式?。用一個中介對象來封裝一系列的對象交互,中介者使各個對象不需要顯示地相互調用,從而使其耦合松散,而且可以獨立地改變他們之間的交互。? ? ? ?
? ? ? ? 適用:
? ? ? ? 1,一組對象以定義良好但以復雜的方式進行通訊,產生的相互依賴關系結構混亂且難以理解
? ? ? ? 2,一組對象引用其他很多對象并且直接與這些對象通訊,導致難以復用該對象
? ? ? ? 3,想定制一個分布在多個子類中的行為,但又不想生成太多的子類
訪問者模式Vistor:
????????一個對象結構包含很多類對象,而系統要求這些類對象實施一些依賴于某具體類的操作;適用于,需要對一個對象結構中的對象進行很多不同的并且不相干的操作,它允許在不改變各元素的類的前提下定義作用于這些元素的新操作。如shoppig-car購物車有不同物品item,結賬方式有人工manual和自動auto,那么這個對象結構就包含很多item,依賴的具體類就是結賬checkout,使用checkout中的結賬方法結合不同的物品進行結賬。? ? ? ?
解釋器模式Interpreter:
????????給定一種語言,定義它的文法表示,并定義一個解釋器,該解釋器根據文法來解釋語言中的句子。
訪問者模式Visitor:
? ? ? ? 定義一對多的關系,當一個對象的狀態發生改變的時候,所有依賴它的對象都收到通知并自動更新
策略模式Strategy:
????????對于不同算法進行封裝和切換,使得算法可以獨立于使用他們的用戶的變化而變化,但調用策略的對象只有一個
? ? ? ? 適用:
命令模式Command:
????????將一個請求封裝為一個對象,從而可用不同的請求對客戶進行參數化,將請求排隊或記錄請求日志,支持撤銷的操作
? ? ? ? 適用:
迭代器模式Iterator:
????????提供一個方法來順序訪問一個聚合對象中各個對象的各個元素,而不是直接暴露改對象的內部表示? ? ? ? ? ?