不覺春消散得這般快馏段,下午出去掃個尾轩拨,臨河樟樹上一躺、跟著歌哼哼唧唧院喜,旁邊的鳥兒也是亡蓉。還有許多松鼠穿來蕩去。微風一來够坐,似夢似醉寸宵。
心里念著,有酒的神仙也不過如此吧元咙。作為一只JAVA猿,在不寫程序的時光里巫员,生活簡簡單單庶香,虛度得如此美好。
但程序的世界雜念太多简识,以致背離了美的初衷赶掖。今夜我要談—面—向—對—象!我不喜歡它七扰,以Ruby之名奢赂。
喬布斯在90年代的一個電視節(jié)目里曾談到面向對象,舉了個咖啡的例子颈走。從前的程序需要知道一杯摩卡的每個制作細節(jié)膳灶,親自制作;而面向對象立由,僅需走進咖啡館轧钓、沖著漂亮的女服務員、“嗨?一杯摩卡”锐膜。
雖然喬布斯寫程序沒我厲害毕箍,但不可否認這個栗子很好。wikipedia關于OOP的首句畫風卻是這樣:
Object-oriented programming (OOP) is a programming paradigm based on the concept of "objects", which may contain data, in the form of fields, often known as attributes and code, in the form of procedures, often known as methods.
不明覺厲道盏!下午我躺在樹上一陣微風而柑、沁人心脾文捶。但在嘈雜的咖啡館,經(jīng)常旁邊坐著一堆發(fā)際線明顯的年青人媒咳,有的大叫拄轻、有的臉紅,混亂之中好不容易才辨識了一句“面向對象就是封裝伟葫、繼承恨搓、多態(tài)”。
很多程序猿入行起就被強行灌入了很多高大尚的酒筏养,醉了便再也不醒人事斧抱。也忘記了像喬布斯那樣說人話,我寧愿記起前臺那身材正點的妹紙渐溶。
面向對象辉浦,精髓更多是面向漂亮的女孩子,而不是像SOLID原則這樣生硬的花招茎辐。Spring團隊花了很多年才將“控制反轉”換成了“依賴注入”宪郊,雖然技術實現(xiàn)都一樣、但忽略了問題的本質拖陆。
很多程序猿愛分析xx的原理弛槐,但對xx所解決的問題、卻理解不深依啰。工作實踐上做系統(tǒng)設計乎串,解決方案從來都有N種,跟據(jù)所面臨的問題來擇其優(yōu)劣速警。
OOP將復雜的世界解藕成對象和關系叹誉,關系更加重要點,就像人跟社會闷旧、社會更重要一樣长豁。OOP就像交易的契約、通行貨幣忙灼,是對服務的承諾匠襟。以物易物,我養(yǎng)牛的不需要種小麥缀棍,拿錢交易宅此。
軟件設計思想是沒有邊界,但語言從來都有爬范。
作為Rubyer父腕,我深知Java是有罪的,在面向對象方面青瀑,因為它很庸腫璧亮,繼承萧诫、抽象、還有死版的接口枝嘶。繼承是很糟糕的一套帘饶,好在GO已經(jīng)沒有繼承機制。Object-C曾經(jīng)必有.h和.m來分別定義interface和實現(xiàn)群扶,幸運的是Swift把它干掉了及刻。
Ruby的迷人在于它有很多很多方式叫人爽,無論從哪偷來的竞阐。首先一種是“Duck Typing"缴饭,英雄莫問出處,你只要叫的像只鴨子骆莹、走得像只鴨子颗搂,即便是個人、但在我心中永遠都是只鴨子幕垦。
In Ruby, we rely less on the type (or class) of an object and more on its capabilities. Hence, Duck Typing means an object type is defined by what it can do, not by what it is. Duck Typing refers to the tendency of Ruby to be less concerned with the class of an object and more concerned with what methods can be called on it and what operations can be performed on it. In Ruby, we would use respond_to? or might simply pass an object to a method and know that an exception will be raised if it is used inappropriately.
代碼不會思考丢氢,但人會。優(yōu)秀的語言不關心咖啡小妹是長腿的還是胸大的先改,它關注的應該是能為我提供咖啡的服務疚察。Ruby天然萌。
還有更酷的武器讓很多程序語言哭暈在廁所盏道。我曾做一個特別惡心的需求稍浆,那年還很年青,產(chǎn)品姐姐說就照著xx那樣做猜嘱,于是把那個業(yè)務線的代碼copy過來,過程疼得就像連根拔起一棵大樹嫁艇,涉及10來個類朗伶,我需要的僅是那200行不到的功能。
這是個很悲傷的故事步咪。因為它亂用了繼承论皆,像蜘蛛網(wǎng)一樣牽一發(fā)而動全身。Ruby有include猾漫,帶組合的味道点晴。
module ModuleA
def greet
puts 'hello world'
end
end
module ModuleB
include ModuleA
end
ModuleB.new.greet
hello, world!非常美妙悯周,就像下午那陣微風粒督、浮動著靜靜的河水,令人懷念禽翼。我躺在樹上酣睡了半天屠橄,樹下路過個小女孩族跛,就像發(fā)現(xiàn)新大陸一樣沖著媽媽尖叫,“看锐墙,有大叔在樹上睡覺礁哄。”
也許我老了溪北,不再年青桐绒,卻更懂時間。曾經(jīng)在風景里瞎逛之拨,今天在風景的樹上一躺茉继,也成了風景本身。我不是在嘲笑Java敦锌、也無意亂噴什么馒疹,而是真愛自由、開放乙墙、包容的Ruby颖变。
2016/04/17
于上海