什麼叫做面向對象編曲?
01-14
當我們提到面向對象的時候,它不僅指一種程序設計方法。它更多意義上是一種程序開發方式。在這一方面,我們必須了解更多關於面向對象系統分析和面向對象設計(Object Oriented Design,簡稱OOD)方面的知識。
以上引文是面向對象編曲的緣起。
- 類(Class)定義了一件樂器的抽象特點。通常來說,類定義了樂器的屬性和它可以做到的(它的行為)。舉例來說,「Acoustic_Guitar」這個類會包含木吉他的一切基礎特徵,例如它的音量、相位和在歌曲中出現的位置。類可以為編曲提供模版和結構。一個類的方法和屬性被稱為「成員」。 我們來看一段偽代碼:
類 Acoustic_Guitar
開始 演奏者:音量:
拍速: 和弦: 演奏技法():結束- 對象(Object)是類的實例。例如,「Acoustic_Guitar」這個類列舉吉他的特點,從而使這個類定義了世界上所有的吉他。而「Thom Yorke手中的Takemine」這個對象則是一把具體的吉他,它的屬性也是具體的。吉他在歌曲中以特定的方式和速度演奏著特定的和弦或旋律,而「Thom Yorke手中的Takemine」在Fake Plastic Tree這首歌中從第一小節開始即在strumming兩個套路(以A開始的和以Bm9開始的兩個)。因此,「Thom Yorke手中的Takemine」就是Acoustic_Guitar這個類的一個實例。一個具體對象屬性的值被稱作它的「狀態」。(編曲者給對象分配演奏的時段和演奏的內容,而不會給類分配這些東西,這很好理解,類是抽象的,演奏者不可能給抽象的東西分配任務,對象是具體的)。假設我們已經在上面定義了Acoustic_Guitar這個類,我們就可以用這個類來定義對象:
定義Takemine是Acoustic_Guitar
Takemine.演奏者:=Thom YorkeTakemine.strumming(A, Asus4/#F, E6/B, Dsus2...)- 方法(Method)是定義一個類可以做的,但不一定會去做的事。作為一把acoustic guitar,Takemine可以被掃弦,因此「strumming()」就是它的一個方法。與此同時,它可能還會有其它方法,例如「bend()」,或者「tap()」。 對一個具體對象的方法進行調用並不影響其它對象,正如所有的吉他都可以掃弦,但是你讓一把吉他掃弦不代表所有的吉他都開始掃弦。 如下例:
定義Takemine是Acoustic_Guitar
定義Martin是Acoustic_GuitarTakemine.strumming(A, #Fm, D, E)則Takemine開始掃一個A調1645的套路,但Martin則沒任何反應。除了某知乎用戶的個人介紹中曾見過,並不知道有這個概念。
個人認為也許可能大概是一種調侃,可能某個搞音樂的小朋友後來去做程序員了。請成全我想要被摺疊的願望吧~補充,非常贊同此問題評論中某知乎用戶所說的「其實好的、專業的編曲就是面向對象的」。期待有一天「面向對象編曲」這一概念編入辭典。推薦閱讀:
※如何評價姬賡的詞作?
※是不是用網易雲音樂的人就比用qq音樂的人逼格高?
※你會推薦flumpool的哪首歌(如果只能選一首)?
※中國為什麼許多樂隊在人員大幅更換後還保持原來的名字?究竟誰擁有搖滾樂隊的隊名?
※可以信手拈來的哼出至少不難聽的曲子,聽了幾萬首歌,和弦一開就有靈感,是否考慮轉專業學編曲或作曲?