Enviar pesquisa
Carregar
Duck Typing and Multiple Inheritance
•
Transferir como PPTX, PDF
•
1 gostou
•
386 visualizações
Sway Wang
Seguir
Introduction to duck typing and Multiple Inheritance
Leia menos
Leia mais
Software
Tecnologia
Educação
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 46
Baixar agora
Recomendados
J Ruby和Rails 让Ruby语言融入Java项目
J Ruby和Rails 让Ruby语言融入Java项目
George Ang
從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby
建興 王
Nashorn on JDK 8 (ADC2013)
Nashorn on JDK 8 (ADC2013)
Kris Mok
Ruby Object Design (Chinese)
Ruby Object Design (Chinese)
Eddie Lee
105-2 iOS程式設計(二)
105-2 iOS程式設計(二)
Hao Lee
6. 非同步設計
6. 非同步設計
Justin Lin
除錯、測試與效能
除錯、測試與效能
Justin Lin
Code review
Code review
Sway Wang
Recomendados
J Ruby和Rails 让Ruby语言融入Java项目
J Ruby和Rails 让Ruby语言融入Java项目
George Ang
從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby
建興 王
Nashorn on JDK 8 (ADC2013)
Nashorn on JDK 8 (ADC2013)
Kris Mok
Ruby Object Design (Chinese)
Ruby Object Design (Chinese)
Eddie Lee
105-2 iOS程式設計(二)
105-2 iOS程式設計(二)
Hao Lee
6. 非同步設計
6. 非同步設計
Justin Lin
除錯、測試與效能
除錯、測試與效能
Justin Lin
Code review
Code review
Sway Wang
Go for web
Go for web
Weng Wei
网站前端代码静态检查工具研究
网站前端代码静态检查工具研究
pop2008
为什么要学Python
为什么要学Python
Depeng Cong
与Python一路走来
与Python一路走来
leejd
Dpl in action
Dpl in action
Pu Shiming
愛創小小聚201307 小強分享
愛創小小聚201307 小強分享
iTrEnD
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Justin Lin
构建可维护的Javascript 小米网
构建可维护的Javascript 小米网
yang alex
模块一-Go语言特性.pdf
模块一-Go语言特性.pdf
czzz1
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
Justin Lin
网站前端代码静态检查工具综述
网站前端代码静态检查工具综述
pop2008
Java DSL与动态代码生成技术的应用 (上集:DSL部分)
Java DSL与动态代码生成技术的应用 (上集:DSL部分)
悦 温
Linux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledge
Angel Boy
從軟體開發角度 談 Docker 的應用
從軟體開發角度 談 Docker 的應用
謝 宗穎
Jasmine
Jasmine
tb-vertical-guide
合久必分,分久必合
合久必分,分久必合
Qiangning Hong
RSpec & TDD Tutorial
RSpec & TDD Tutorial
Wen-Tien Chang
網站上線了,然後呢?
網站上線了,然後呢?
Kirk Chen
DDD系統分析
DDD系統分析
國昭 張
[3]投影片 futurewad樹莓派研習會 141204
[3]投影片 futurewad樹莓派研習會 141204
CAVEDU Education
Refactoring
Refactoring
Sway Wang
MCU compare
MCU compare
Sway Wang
Mais conteúdo relacionado
Semelhante a Duck Typing and Multiple Inheritance
Go for web
Go for web
Weng Wei
网站前端代码静态检查工具研究
网站前端代码静态检查工具研究
pop2008
为什么要学Python
为什么要学Python
Depeng Cong
与Python一路走来
与Python一路走来
leejd
Dpl in action
Dpl in action
Pu Shiming
愛創小小聚201307 小強分享
愛創小小聚201307 小強分享
iTrEnD
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Justin Lin
构建可维护的Javascript 小米网
构建可维护的Javascript 小米网
yang alex
模块一-Go语言特性.pdf
模块一-Go语言特性.pdf
czzz1
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
Justin Lin
网站前端代码静态检查工具综述
网站前端代码静态检查工具综述
pop2008
Java DSL与动态代码生成技术的应用 (上集:DSL部分)
Java DSL与动态代码生成技术的应用 (上集:DSL部分)
悦 温
Linux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledge
Angel Boy
從軟體開發角度 談 Docker 的應用
從軟體開發角度 談 Docker 的應用
謝 宗穎
Jasmine
Jasmine
tb-vertical-guide
合久必分,分久必合
合久必分,分久必合
Qiangning Hong
RSpec & TDD Tutorial
RSpec & TDD Tutorial
Wen-Tien Chang
網站上線了,然後呢?
網站上線了,然後呢?
Kirk Chen
DDD系統分析
DDD系統分析
國昭 張
[3]投影片 futurewad樹莓派研習會 141204
[3]投影片 futurewad樹莓派研習會 141204
CAVEDU Education
Semelhante a Duck Typing and Multiple Inheritance
(20)
Go for web
Go for web
网站前端代码静态检查工具研究
网站前端代码静态检查工具研究
为什么要学Python
为什么要学Python
与Python一路走来
与Python一路走来
Dpl in action
Dpl in action
愛創小小聚201307 小強分享
愛創小小聚201307 小強分享
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
构建可维护的Javascript 小米网
构建可维护的Javascript 小米网
模块一-Go语言特性.pdf
模块一-Go语言特性.pdf
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
网站前端代码静态检查工具综述
网站前端代码静态检查工具综述
Java DSL与动态代码生成技术的应用 (上集:DSL部分)
Java DSL与动态代码生成技术的应用 (上集:DSL部分)
Linux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledge
從軟體開發角度 談 Docker 的應用
從軟體開發角度 談 Docker 的應用
Jasmine
Jasmine
合久必分,分久必合
合久必分,分久必合
RSpec & TDD Tutorial
RSpec & TDD Tutorial
網站上線了,然後呢?
網站上線了,然後呢?
DDD系統分析
DDD系統分析
[3]投影片 futurewad樹莓派研習會 141204
[3]投影片 futurewad樹莓派研習會 141204
Mais de Sway Wang
Refactoring
Refactoring
Sway Wang
MCU compare
MCU compare
Sway Wang
Solid
Solid
Sway Wang
Design patterns and MV
Design patterns and MV
Sway Wang
How to select password(Chinese)
How to select password(Chinese)
Sway Wang
Introduction to Python
Introduction to Python
Sway Wang
Agile development
Agile development
Sway Wang
Libusb
Libusb
Sway Wang
Introduction to Perl
Introduction to Perl
Sway Wang
Mais de Sway Wang
(9)
Refactoring
Refactoring
MCU compare
MCU compare
Solid
Solid
Design patterns and MV
Design patterns and MV
How to select password(Chinese)
How to select password(Chinese)
Introduction to Python
Introduction to Python
Agile development
Agile development
Libusb
Libusb
Introduction to Perl
Introduction to Perl
Duck Typing and Multiple Inheritance
1.
多重繼承和Duck Typing 2014/06/19 Sway Wang
2.
Outline • 簡介Static Typing以及Dynamic
Typing • 程式語言發展歷史 • 多重繼承 • Duck Typing • Template Method Pattern • 結論
3.
Outline • 簡介Static Typing以及Dynamic
Typing • 程式語言發展歷史 • 多重繼承 • Duck Typing • Template Method Pattern • 結論
4.
Static Typing • 程式語言中的每個變數型別在編譯時期就完全決定好 •
變數使用前需要宣告 • 編譯時期去做型別檢查 • C • C++ • Java • C# • Go • Swift
5.
Dynamic Typing • 不需要事先宣告變數就能直接使用 •
程式實際執行時才做型別檢查 • Python • Ruby • Perl • PHP • JavaScript
6.
TIOBE Index for
June 2014
7.
Outline • 簡介Static Typing以及Dynamic
Typing • 程式語言發展歷史 • 多重繼承 • Duck Typing • Template Method Pattern • 結論
8.
什麼是型別 • 從硬體角度來看,電腦只能處理二進位 • 控制CPU的組合語言處理資料只有數字 •
如何表示字串? • 為每個字元指定代號,當成一連串的整數 來處理
9.
ASCII Table
10.
型別的誕生 • 必須記住所有數字資料代表的意義 • 對程式設計師負擔太重 •
1954年IBM開發出Fortran,建立型別的概 念
11.
Fortran • IBM工程師John Backus開發的世界上第一 個高階程式語言 •
提出時遭到IBM顧問John von Neumann 反對 • Why would you want more than machine language? • 建立整數、浮點數、陣列等型態
12.
Lisp • John McCarthy在1958年開發 •
用來處理人工智慧 • 世界上第二個高階程式語言 • 第一個函式語言(Functional Language) • 只有兩種資料型態:list, atom • Dynamic Typing的始祖
13.
Simula • 1967由Norwegian Computing
Center所開發 •第一個物件導向程式語言 •提出Object, Class, Inheritance, virtual method •Ref Type : 可指向任何物件 •影響C++和Smalltalk(世界上第二個物件導向語言)
14.
Smalltalk • Xerox PARC在1972所發表 •
繼承Simula物件導向的概念 • 和Lisp一樣採用動態型別 • 在C++誕生前最主要的物件導向程式語言 • 影響MVC, GUI以及許多物件導向程式語言
15.
Outline • 簡介Static Typing以及Dynamic
Typing • 程式語言發展歷史 • 多重繼承 • Duck Typing • Template Method Pattern • 結論
16.
單一繼承的問題 • 許多程式語言只支援單一繼承 – Smalltalk,
Java, C# • 現實世界中一個人可能同時是公司員工也 是父親 • 單一繼承造成某些函式庫的設計上不太自 然
17.
多重繼承的解決辦法
18.
多重繼承的問題 • 結構複雜化 • 繼承的優先順序 •
相同名稱的衝突 The diamond problem
19.
多重繼承和goto敘述類似 • 結構化程式解決goto問題時改為使用if和 loop • 多重繼承應改為使用受限的多重繼承 •
Java, C#的interface以及Ruby的mix-in
20.
C#的解法 • 繼承實做 =>
指定父類別 • 繼承規格 => implement指定interface • 只能繼承一個父類別 • 可繼承多個interface • 無法繼承多個實做
21.
Interface的缺點 • 無法共享實做內容 • 違反DRY (Don’t
Repeat Yourself) • 必須改用合成 (Composite)
22.
其他語言的解法 • Ruby Mix-in(Module) –
Mix-in類似Interface – 無法單獨建立實體 – 不繼承自一般類別
23.
其他語言的解法 • Python允許多重繼承 – 用C3
Algorithm算出Method Resolution Order – 確保子類別修改過得函式順序一定優先於父類 別
24.
Outline • 簡介Static Typing以及Dynamic
Typing • 程式語言發展歷史 • 多重繼承 • Duck Typing • Template Method Pattern • 結論
25.
Duck Typing • Dynamic
Typing的其中一個好處是不用宣 告型別 • 比較容易處理開發前沒有設想過的資料 • If it looks like a duck, swims like a duck, and quacks like a duck, then it must be a duck.
26.
Duck Typing Example
27.
Message Log 輸出的對象要改為字串該怎麼辦? 1. 複製
log()函式改寫成輸出到字串的版本 2. 輸出到檔案再讀回來
28.
Message Log(Duck Typing) •
Python中的StringIO有 File Object所有的methods • C#要做到類似的事情相當麻煩
29.
Outline • 簡介Static Typing以及Dynamic
Typing • 程式語言發展歷史 • 多重繼承 • Duck Typing • Template Method Pattern • 結論
30.
泡咖啡
31.
泡茶
32.
第一版的設計
33.
還是有類似的部份
34.
修改Base class
35.
第二版的設計
36.
Template Method Pattern •
把演算法的步驟定義在一個函式中 • 由子類別重新定義一個或多個步驟
37.
動態語言實做Design Pattern • 大多數情況實做起來較簡潔且彈性大 •
不需要為了滿足型別而使用繼承
38.
Ruby Enumerable • 一個Library
(Module)提供以下這些函式
39.
Ruby Example • Template
Method的變形,不使用繼承
40.
其他特性
41.
First-Class Function Nested Function
42.
Closure(閉包)
43.
Outline • 簡介Static Typing以及Dynamic
Typing • 程式語言發展歷史 • 多重繼承 • Duck Typing • Template Method Pattern • 結論
44.
Static Typing的缺點 • 一定要指定型別 –
有時只為了單純滿足編譯器 • 較為缺乏彈性
45.
Dynamic Typing的缺點 • 編譯時不檢查型別,執行時才檢查錯誤 –
撰寫完整的單元測試來彌補 • 閱讀程式碼時資訊較少 – 靠文件來補齊 – 撰寫簡潔程式碼 • 執行速度較慢 – 現在的電腦在大部分應用上,效能都不是問題 – 程式的彈性和生產力比效能來的重要
46.
Q & A •
Thanks for your listening!!
Notas do Editor
Introduction to Static and Dynamic Typing
一個程式語言中的每個變數型別在編譯時期就完全決定好
一個程式語言中的每個變數型別在編譯時期就完全決定好
TIOBE
John Backus
John Backus
Baixar agora