第六章:面向物件
文章目錄
第一節:關於類
面向物件
- 面向物件
之前我們介紹過函式,函式是對程式語句的封裝與複用;
類是則是對變數
和函式
的封裝和複用,封裝有機關聯的變數和函式為類,變數和函式,稱為類的屬性
和方法
;
由於類比函式的封裝又提高了一個層次,因此複用性也得到進一步提升;(試想一下維護100個函式直觀容易,還是維護5個類直觀容易呢?)
面向過程的程式設計是以函式
為核心的,而面向物件的程式設計是以類
為核心的,一切功能的實現,都是通過建立一個司職該功能的類的例項,進而呼叫其方法去予以實現的;
以類為核心的、面向物件的程式設計,提高了程式碼的模組化程度,便於大規模協作的開展;
在面向物件的程式開發(Object-Oriented-Programming或OOP)中,架構師的工作,往往只是模組拆分、介面定義、例項組裝,類內部的具體方法介面的實現,則交由其他人去完成;
現如今的高階語言,基本都是面向物件的;
面向物件的三大特性:封裝
、繼承
、多型
;
另一種提法是四大特性,即三大特性的基礎上,再加上一個抽象
;
- 封裝
封裝就是將常用的程式碼段封裝為函式,常用的函式封裝為類,常用的類封裝為模組與類庫;
封裝提高了程式碼的可維護性和複用性,同時也更利於開源與傳播;
封裝性催生了模組化,便於大規模協作開發的開展;
- 繼承
正如自然界中,動物=>人=>程式設計師的關係,人是動物類的一個分支,程式設計師是人的一個分支,在程式設計中,我們可以通過繼承來表達這樣的關係;
動物類是人類的父類(又叫超類),人是程式設計師的父類;
動物類的共同特徵,如都有生命、都會新陳代謝、都會死亡等等,在定義人這個類時,是無需重複宣告的,這樣就在一層層的繼承中,節省了大量的程式碼;
有繼承就有發展,否則繼承就沒有意義;
【程式設計中的繼承】
在程式設計中,發展體現為:
①在父類的基礎上增加新的屬性與方法;
②重寫(或者叫覆寫、覆蓋)父類方法;
對父類方法的覆寫,又可以分為【顛覆式】和【改良式】兩種;
【顛覆式】覆寫是指子類全盤否定父類方法實現,由子類自己做一個全新的實現;
【改良式】覆寫是指子類先將父類的實現拿過來,再進行新的拓展;
- 多型
在繼承的基礎上,一個父類會有不同的子類實現,如戰士父類可以有騎兵、步兵、弓弩手等不同子類;
多型,即【一個父類可以有多種不同的子類形態】;
【多型的共性與個性】
在多型中,同源子類之間,既存在共性,又存在個性,共性與個性各有其用處;
例如騎兵、步兵、弓弩手都是戰士的子類,因此他們都有進攻方法與防守方法,這就是【共性】;
而他們的具體進攻方法各自有不同的實現,騎兵衝鋒、步兵肉搏、弓弩手射箭,這就是【個性】;
在一支由不同兵種組成的軍隊中(即戰士例項的集合),當總司令下達全體進攻的命令時,不同兵種做何種具體形式的進攻(個性)是不重要的,重要的是共性;
當司令想要採用一些細膩的戰術時,比如先進行一輪齊射,再由騎兵進行一輪踩踏,最後上步兵打掃戰場,此時不同兵種的差異化進攻方式則展現其價值,此時個性變得重要;
共性是由父類所帶來的,個性是由子類覆寫所帶來的;
- 抽象
在繼承和多型中,如果父類不對某個方法做任何實現,只是留白,具體的實現交由子類自己去完成,這時我們稱該方法是抽象的;
如果一個父類中的所有方法都是抽象的,我們就稱該類為一個【介面】;
抽象是一種藝術,架構師就是這種藝術的玩弄者;
架構師所做的工作,就是拆分模組,定義介面,完成預組裝,形成一具沒有血肉的架,然後將填充的工作下放到團隊中的不同程式設計師,填充完成之日即是專案大廈落成之時;
類的封裝
例:
-
封裝一個人的類Person,需求如下:
1、封裝以下屬性:姓名、年齡、存款
2、封裝自我介紹方法,陳述以上屬性
3、建立一個人,設定其基本資訊
4、列印此人資訊
5、令此人進行自我介紹
# 封裝一個Person類,將與人有關的屬性、方法組合在一起,以便將來複用
class Person:
# 屬性定義和預設值
name = "林阿華"
age = 20
rmb = 50
# 構造方法:外界建立類的例項時會呼叫
# 構造方法是初始化例項屬性的最佳時機
def __init__(self,name,age,rmb):
print("__init__的方法被呼叫了")
self.name = name
self.age = age
self.rmb = rmb
# 自我介紹方法
# self = 類的例項
def tell(self):
print("我是%s,我%d歲了,我有存款%.2f萬元"%(self.name,self.age,self.rmb))
- 建立例項p,並呼叫Person的tell()方法
# 建立Person類的例項
p = Person("易阿天",60,500)
# 呼叫例項的tell方法
p.tell()
執行結果:
注意將Person的屬性和方法使用一個
標準制表符
縮排在Person的類定義以內;
“_ init _”
是類的構造方法,用於建立類的例項,左右各有兩個下劃線;
使用PyCharm輸入完def __init時系統彈出提示,IDE會自動完成方法的定義;
每個方法在定義時,系統會自動加上一個self
引數在第一個引數位,這個引數代表將來建立的例項本身;
再呼叫方法時,self
是不必親自傳入的,self是系統用來標識例項本身的;
構造方法的呼叫形式為:Person(self以外的其它引數)
;
類的私有成員
【成員】就是指類的
屬性
和方法
;
【私有】,即不能再類的外界進行訪問;
目的是為了保障安全
,如涉及隱私的屬性、核心方法實現等;
例:
- 封裝一個人的類Person,需求如下:
1、建立一個Person類,新增存款資訊
2、保護存款資訊,將其設定為私有
3、為存款資訊新增保護,使其不能被直接訪問
4、增加設定密碼功能 ·增加存款查詢功能
5、只有輸入密碼正確的情況下才能查詢存款資訊
class Person:
# 普通屬性與私有屬性
name = "林阿華"
age = 20
__rmb = 1000 #(須通過公有方法來訪問)
# 私有方法:設定存款
def __setrmb(self,rmb):
self.__rmb = rmb
# 通過普通方法訪問私有方法進行存款設定
def setrmb(self,rmb):
pwd = input("請輸入設定密碼:")
if (pwd == "123456"):
self.__setrmb(rmb)
else:
print("您沒有許可權")
# 公開一個普通方法,共外界訪問私有屬性self.__rmb
def getrmb(self):
pwd = input("請輸入查詢密碼:")
if (pwd == "123456"):
return self.__rmb
else:
return "您沒有訪問許可權"
# 普通方法
def tell(self):
print("大家好,我是%s"%(self.name))
- 建立Person例項,並通過公有方法訪問私有成員
p = Person()
#通過例項訪問類的普通屬性
print(p.name)
print(p.age)
# 私有成員不能被直接訪問
# print(p.__rmb) # AttributeError: 'Person' object has no attribute '__rmb'
#通過例項訪問類的普通方法
p.tell()
#通過普通方法訪問私有屬性
rmb = p.getrmb()
print("我的存款是:",rmb)
# 通過普通方法訪問私有方法
p.setrmb(500)
rmb = p.getrmb()
print("我的存款是:",rmb)
執行結果:
- 注意的幾個問題
1、程式碼中的__rmb
屬性、__setrmb
方法都是私有的,在類的外部是無法p.__rmb
進行直接訪問的;
2、任何前置兩個下劃線的成員(屬性與方法)都是私有的,只能在類的內部進行訪問;
外界訪問私有成員的方法是,使用公有方法對外界提供私有成員訪問介面
,但在內部先行進行許可權校驗,如輸入密碼等,如本例中的setrmb
方法和getrmb
方法;
類的專有方法
- 概述
當類沒有繼承於任何類時,它預設繼承的是 【系統的object】 類
在object類中,定義了許多專有方法,它們的方法名是這樣的:_ xxx _
,左右各有兩個下劃線;
專有方法不是用來給例項直接呼叫的,而是有其特定的用途,比如_ init _
是在外界呼叫類名建立例項時呼叫的;
再比如,當外界print(obj)時,其輸出的字串其實是來源於obj對應的類的_ str _
方法的返回值的;
-
常見專有方法
___init___
: 建構函式,在生成物件時呼叫
___del___
: 解構函式,釋放物件時使用
___str___
:例項的列印樣式
___len___
: 獲得長度
___ gt___
: 比較大小(物件之間進行算術運算後,應返回一個計算後的結果)
___add___
: 加運算
___sub___
: 減運算
___mul___
: 乘運算
___mod___
: 求餘運算
___pow___
: 乘方
例:封裝一個更加標準化的Person,需求如下:
在建立物件時列印日誌
在物件銷燬時列印日誌
自定義物件的列印樣式
設法統計人的“長度”
# 封裝一個Person類,將與人有關的屬性、方法組合在一起,以便將來複用
class Person:
# 初始預設的屬性
name = "某某某"
age = 0
rmb = 0
# 構造方法:外界建立類的例項時呼叫 ,構造方法是初始化例項屬性的最佳時機
def __init__(self, name, age, rmb):
print("__init__:我被建立了")
self.name = name
self.age = age
self.rmb = rmb
# 析構方法,在物件被刪除時呼叫
def __del__(self):
print("__del__:我被刪除了")
# 在物件被列印時,提供一個供列印的字串
def __str__(self):
return "{name:%s;age:%d;rmb:%.2f}" % (self.name, self.age, self.rmb)
# 返回物件的長度,如何計算長度是自定義的
def __len__(self):
return int(self.rmb)
# 比較當前例項是否大於另一個同類的other例項,比較方法自定義
def __gt__(self, other):
if self.rmb > other.rmb:
return True
else:
return False
# 定義與另一個例項相加的結果
def __add__(self, other):
return Person(self.name + "-" + other.name, min(self.age, other.age), self.rmb + other.rmb)
# 定義與另一個例項相減的結果
def __sub__(self, other):
return Person(self.name + "VS" + other.name, self.age+other.age, abs(self.rmb - other.rmb))
# 定義與另一個例項相乘的結果
def __mul__(self, other):
print("相乘")
return self
# 定義對另一個物件求模的結果
def __mod__(self, other):
print("取餘")
return other
# 自我介紹方法
# self = 類的例項
def tell(self):
print("我是%s,我%d歲了,我有存款%.2f萬元" % (self.name, self.age, self.rmb))
建立物件,並執行列印、比較、運算等操作
# 建立Person類的例項,程式開始時例項物件會被系統建立,會呼叫物件的__init__方法,多少個例項,呼叫多少次
p1 = Person("易阿天", 60, 500)
p2 = Person("林阿華", 20, 10)
# 呼叫例項方法
p1.tell()
# 呼叫__str__方法列印物件
print(p1,p2)
# 呼叫__len__方法求物件長度
print(len(p1))
# 呼叫__gt__方法進行比較操作
print(p1 > p2)
# 呼叫__add__方法進行加操作,使用此類操作,會建立一個新物件,再次會短暫呼叫__str__和__del__方法,
print(p1 + p2)
# 呼叫__sub__方法進行加操作,同上會建立新物件
print(p1 - p2)
# 呼叫__mul__方法進行加操作,同上會建立新物件
print(p1 * p2)
# 呼叫__mod__方法進行加操作,同上會建立新物件
print(p1 % p2)
# 程式結束時例項物件會被系統銷燬,會呼叫物件的__del__方法,多少個例項,呼叫多少次
執行結果:
- 專有方法__repr__與__str__
__repr__
是代表的意思,與__str__
功能相似,都是返回字串。
當我們呼叫print()時,列印一個字串時,優先使用的是__str__
方法返回的字串如果未定義則使用__repr__
方法;
但是如果是在終端直接輸出時,則直接使用__repr__
方法返回的字串;
例:在控制檯中
正常來說,在IDE中,我們要列印a的值,要使用
print(a)
,直接a
是打印不出來的,但在控制檯上卻可以。此時的a,的值就是從__repr__
裡獲得的,而且只能從這裡獲得。
例:在pycharm中
新建一個文件檔案,這裡自定義一個名字為“MyRepr”
# 定義一個person類
class Person:
# 定義一個構造方法
def __init__(self,name,age):
self.name = name
self.age = age
def __str__(self):
return "sPerson{name:%s,age:%d}"%(self.name,self.age)
#定義一個__repr__的方法,這個方法在這裡只是__str__的備用,當沒有時才會呼叫
def __repr__(self):
return "rPerson{name:%s,age:%d}"%(self.name,self.age)
if __name__ == '__main__':
# 建立一個p物件
p = Person("bill",60)
print(p)
執行結果:
如果使用控制檯執行此文件,結果卻不一樣,因為控制檯 print( p )會找 __str__
方法,但p只找 __repr__
方法
類的繼承與多繼承
-
類的繼承
例:人與壞蛋繼承人(Person)實現一個壞蛋類,用以儲存壞蛋的資訊
壞蛋擁有人的一切正常人的屬性和功能
壞蛋有【惡習】屬性和【作惡】方法
建立一個壞蛋,為其設定其基本資訊和惡習
令其作惡
#這是上節課關於人(Person)這個類的程式碼,這裡重寫一次並試著封裝在myPerson.py模組中。
class Person:
#人的預設屬性和值
name = "某某某"
age = 1
rmb = 0
#人類被建立 # 構造方法,人類被建立初始化例項
def __init__(self,name,age,rmb):
print("__init__的方法被呼叫了")
self.name = name
self.age = age
self.rmb = rmb
# 人類會的方法-自我介紹
def tell(self):
print("我是%s,我%d歲了,我有存款%.2f萬元"%(self.name,self.age,self.rmb))
開始繼承…
# 匯入父類
from myPerson import Person
#定義一個壞蛋類,繼承於人類,因為壞蛋也是人
class Bastard(Person):
# 此時什麼都不寫,也已經具有了父類的所有預設屬性和自我介紹的方法
# 定義一個壞蛋特有的屬性‘作惡’,預設為空
badHobby = None
# 覆寫和父類的構造方法
def __init__(self, name, age, rmb, badHobby):
# 呼叫父類構造方法實現name,age,rmb的設定
super().__init__(name, age, rmb)
print("__init__:壞蛋自己初始化了")
self.badHobby = badHobby
# 覆寫父類的自我介紹方法
def tell(self):
super().tell()
#自己的自我介紹方法
print("勞資乃%s,此路是我開,此樹是我栽,要想從此過,留下買路財"%(self.name))
# 特有方法:作惡
def doBadThings(self):
print("老子專好%s" % (self.badHobby))
# 建立壞人例項:
b = Bastard("李逵", 3, 0.01, "喝酒殺人")
b.tell()
b.doBadThings()
執行結果:
修改器與獲取器
例:引用回上面的例子,人與壞蛋
# 匯入父類
from myPerson import Person
# 繼承於Person類
class Bastard(Person):
# 特色屬性:惡習
badHobby = None
# 覆寫和父類的構造方法
def __init__(self, name, age, rmb, badHobby):
super().__init__(name, age, rmb)
print("__init__:壞蛋自己初始化了")
self.badHobby = badHobby
# 覆寫父類方法
def tell(self):
super().tell()
print("勞資乃%s,此路是我開,此樹是我栽,要想從此過,留下買路財"%(self.name))
# 設定器,用於修改self.badHobby
def setBadHobby(self, badHobby):
self.badHobby = badHobby
# 獲取器
def getBadHobby(self):
return self.badHobby
# 特有方法:作惡
def doBadThings(self):
print("老子專好%s" % (self.badHobby))
#建立例項
b = Bastard("李逵", 3, 0.01, "喝酒殺人")
#修改壞蛋的作惡內容
b.setBadHobby("搶奪財物")
b.tell()
b.doBadThings()
執行結果:
- 多繼承
概述
在Python中,一個類可以同時繼承於多個類;
如果這些父類的成員之間相互沒有衝突,那當然沒有問題;
但如果這些父類中存在相同的成員(屬性、方法),特別是相同的方法時,就會存在“我到底繼承誰的?!”這樣的疑問;
答案是,繼承時【誰的次序在前,就優先繼承誰】
例:Gay,Man Or Woman,需求如下:
封裝男人類,繼承於Person ,使之有陽剛風格的自我介紹,使之能咆哮
封裝女人類,繼承於Person,使之有陰柔風格的自我介紹,使之能撒嬌
封裝Gay類,使之同時具有男人和女人的特性
令其咆哮,令其撒嬌
令其偏陽剛地進行自我介紹
令其偏陰柔地進行自我介紹
# 匯入父類
from myPerson import Person
#定義男人,繼承於‘人’這個父類
class Man(Person):
#自我介紹方法,Man繼承了Person,它的tell是陽剛的
def tell(self):
print("勞資乃%s,勞資%d歲了,勞資有存款%.2f"%(self.name,self.age,self.rmb))
#男人的咆嘯方法
def roar(self):
print("嗷!勞資天下第一!")
#定義女人,繼承於‘人’這個父類
class Woman(Person):
#自我介紹方法,Woman繼承了Person,它的tell是陰柔的
def tell(self):
print("倫家乃%s,倫家%d歲了,倫家有存款%.2f"%(self.name,self.age,self.rmb))
#女人的撒嬌方法
def sajiao(self):
print("好討厭了啦!")
#定義一個GAY,同時繼承於男人和女人
class Gay(Woman,Man):
# 什麼都不寫,都已經具有了Man和Woman的全部屬性和方法
pass
#建立一個男人例項
m = Man("史泰龍",40,10000)
m.tell()
m.roar()
#建立一個女人例項
w = Woman("鳳姐",30,10000)
w.tell()
w.sajiao()
執行結果:
如果現在建立一個GAY的例項,同時繼承於男人和女人,當然它都已經具有了Man和Woman的全部屬性和方法,可以咆嘯,也可以撒嬌,那問題來了,自我介紹的方法應該用男人的還是女人的?
#建立GAY例項
g = Gay("庫克",50,100000000000)
g.tell()
g.roar()
g.sajiao()
執行結果:
多繼承,可以同時繼承Man和Woman的衣鉢,但對於同名方法,在前的類具有更高的優先順序,Woman繼承了Person,它的tell是陰柔的,如果想要讓Gay變得更Man而不是更Woman,只需要調整其繼承順序即可
類的多型
動態繫結,指的是當呼叫一個子類例項的父類方法時,系統能夠自動識別和呼叫【該子類自身對父類方法的實現】
例:軍隊,需求說明:
為帝國建立一支軍隊,包含騎兵、弓箭手、法師
所有兵種都能夠進攻和防守,但形態各異
通過輸入將令,控制每個兵種的攻守細節
#士兵有很多種類,所有兵種都能攻守且形態各異,我們為其定義共同父類——戰士類Soldier
class Soldier:
# 進攻方法
def attack(self):
print("士兵進攻")
# 防守方法
def defend(self):
print("士兵防守")
#接下來定義各種不同形態的子類(多型),對攻防細節做不同實現
# 騎兵類 (繼承於戰士類)
class Calvary(Soldier):
def attack(self):
print("騎兵使用了鐵蹄碾壓")
def defend(self):
print("騎兵防守")
# 弓箭手類 (繼承於戰士類)
class Archer(Soldier):
def attack(self):
print("弓箭手使用了萬箭齊射")
def defend(self):
print("弓箭手防守")
# 法師類 (繼承於戰士類)
class Master(Soldier):
def attack(self):
print("法師使用了魔法火焰")
def defend(self):
print("法師防守")
# 建立一支軍隊列表
kingsArmy = []
# 建立不同兵種的戰士例項
c = Calvary()
a = Archer()
m = Master()
# 應徵入伍,加入列表
kingsArmy.append(c)
kingsArmy.append(a
相關推薦
第六章:面向物件
文章目錄
第一節:關於類
==面向物件==
==類的封裝==
==類的私有成員==
==類的專有方法==
==類的繼承與多繼承==
==類的多型==
==靜態方法和類方法==
Python入門筆記—第六章(面向物件之OOP)
第六章:面向物件之OOP
1.面向物件的概述(Object Oriented,OO)
1.1 名詞解釋
OO(Object Oriented):面向物件
OOA(Object Oriented Analysis):面向物件的分析
OOD(Object Oriente
【第六章】面向物件基礎
1. 面向物件可以幫助我們從巨集觀上把握、從整體上分析整個系統。 但是具體到實現部分的微觀操作(就是一個個方法),仍然需要面向過程的思路去處理。
2. 類可以看成一類物件的模板,物件可以看成該類的一個具體例項。
3. 對於一個類來說,一般有三種常見的成員:屬性field、方法method、構造器const
【javascript高階程式設計】讀書摘錄3 第六章、面向物件
第六章、面向物件的程式設計
這一章應該是Javascript中最抽象的一章,其中原型、原型鏈、建構函式等多次出現,幾乎貫穿了整個章節。而對於建立物件和繼承,也都是基於原型和建構函式而來的。因此這一部分的內容需要細細琢磨。尤其是對於原型、原型鏈,應該多畫圖,加深理解。
“全棧2019”Java第三十五章:面向物件
難度
初級
學習時間
10分鐘
適合人群
零基礎
開發語言
Java
開發環境
JDK v11
IntelliJ IDEA v2018.3
文章原文連結
“全棧2019”Java第三十五章:面向物件
下一章
“全棧2019”Java第三十六章:類
學習小組
加入同步
第五章:面向對象1
沒有 值傳遞 默認 封裝性 軟件開發 大型項目 語句 開發思想 實現 面向對象和面向過程的區別
兩者都是軟件開發思想,先有面向過程,後有面向對象。在大型項目中,針對面向過程的不足推出了面向對象開發思想。區別1. 編程思路不同: 面向過程以實現功能的函數開發為主,而面向對象要
第六章:異常機制
() 不同 finall try arr 運行時 運行 ror 則無 第六章:異常機制 異常的定義
異常:在程序運行過程中出現的意外事件,導致程序中斷執行。
異常處理 try...catch
語法:try{ //可能出現異常的代碼}catch(異常類型 異常對象名){
第六章:循環結構(二)
結構 不執行 三種 表達式 成了 不改變 條件 運算符 步驟 第六章:循環結構(二)
一. for 循環
1.循環結構的四個組成部分
(1). 初始部分:設置循環的初始狀態,比如我們設置記錄循環次數的變量 i 為 0 .
(2). 循環體:重復執行的代碼 .
第六章:需求評審如何進行
角色 來源 職責 介紹 技術 產品介紹 好的 通過 協調 前言今天我們講的需求評審包括兩個部分,需求過濾和需求評審。
需求過濾
1.需求分析不是所有需求都要做進產品,我們要根據公司和產品的定位,進行合適地分析和過濾。
我們需要分析出用戶需求所對應的本質,將其轉化為產品能夠提
Node入門教程(8)第六章:path 模塊詳解
format QQ 調用 保留 微軟 posix interface join 結果 path 模塊詳解
path 模塊提供了一些工具函數,用於處理文件與目錄的路徑。由於windows和其他系統之間路徑不統一,path模塊還專門做了相關處理,屏蔽了彼此之間的差異。
可移
Docker | 第六章:構建私有倉庫
推送 sun 指定 公司 網絡環境 add 屬性 提示 回收機制 前言
上一章節,講解了利用Dockerfile和commit進行自定義鏡像的構建。大部分時候,公司運維或者實施部門在構建了符合公司業務的鏡像環境後,一般上不會上傳到公共資源庫的。這就需要自己搭建一個私有倉庫
第六章:編寫安全應用
利用 flash 網站 這一 ade 第六章 用戶數據 ack else 很多時候,安全應用是以犧牲復雜度(以及開發者的頭痛)為代價的。Tornado Web服務器從設計之初就在安全方面有了很多考慮,使其能夠更容易地防範那些常見的漏洞。安全cookies防止用戶的本地狀態被
《JAVA多線程編程核心技術》 筆記:第六章:單例模式與多線程
會有 isp left sync con 多線程編程 鎖機制 數據 range 一、立即加載/"餓漢模式"和延遲加載/"懶漢模式"
立即加載(又稱餓漢模式):在使用類的時候已經將對象創建完畢,常見實現方法是直接new實例化
延遲加載(又稱懶漢模式):在調用get
第六章:隨機化
gin fat 偽隨機數發生器 偽隨機 運行 合成 內嵌 想要 ini
隨著設計變得越來越復雜,要想產生一個完整的激勵集來測試設計的功能也變得越來越困難。采用受約束的隨機測試法(CRT)自動產生測試集是目前的一種主要的方法。CRT由兩部分組成:使用隨機的數據流為DUT產生
第六章:隨機化(續1)
限制 調試 each 範圍 實例 func 文件中 約束 hand 6.6 pre_randomize和post_randomize函數
我們在調用randomize()函數之前或者之後要立即執行一些操作。比如,在隨機化之前可能要設置類裏的一些非隨機變量(上下限、權重),或
第六章:隨機化(續2)
重要 之間 ilog -o bbbb 動態 調試 即使 不同 6.10 隨機化句柄數組
如果想要產生多個隨機對象,那麽你可能需要建立隨機句柄數組,和整數數組不同,隨機求解器不會創建對象,所以你需要在隨機化前分配所有的元素。
動態數組可以按照需要分配最大數量的元素,然後按照約
Android群英傳知識點回顧——第六章:Android繪圖機制與處理技巧
ride ets 常用 結合 管理 一個 sla 浮雕效果 調用
6.1 屏幕的尺寸信息
6.1.1 屏幕參數
6.1.2 系統屏幕密度
6.1.3 獨立像素密度dp
6.1.4 單位轉換
6.2 2D繪圖基礎
6.3 Android X
第六章:數據挖掘項目完整應用案例演示
分析師 過程 6.2 需求分析 不同 反饋 數據挖掘 分析報告 6.4 6.1項目背景和業務分析需求的提出
......
6.2數據分析師參與需求討論
針對需求收集相關的背景數據和指標,熟悉業務相關邏輯
從數據分析的專業角度評價初步的業務分析需求是否合理,是否可行
6.
C#本質論6.0第六章:繼承
行為 實體 sta 密封類 類型 繼承鏈 tac 預測 兩個類 基類型與派生類型之間的轉型:
顯式轉型與隱式轉型:
從派生類型轉型為基類型稱為隱式轉型,轉型總會成功,不會引發異常。
從基類型轉型為派生類型稱為顯式轉型,在轉型過程中可能會失敗,為了執行顯示轉型,要在原始引用名
Introduction to 3D Game Programming with DirectX 12 學習筆記之 --- 第六章:在Direct3D中繪製
程式碼工程地址:
https://github.com/jiabaodan/Direct12BookReadingNotes
學習目標
熟悉Direct3D介面的定義,儲存和繪製幾何資料 ;
學習編寫基本的頂點和畫素著色器;
學習使用渲染流水線狀態