or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Do you want to remove this version name and description?
Syncing
xxxxxxxxxx
Rust勉強会 第18回
17章
2020/12/4 岡本拓海
本日のメニュー
プレゼン25分くらい+議論5分位で18:30前後終了を目指します。
オブジェクト指向言語の特徴
オブジェクト指向プログラムとは?
GoFの定義によると
Rustはオブジェクト指向?
Rustはオブジェクト指向言語!
継承が選択される理由
継承の悪いところ
Rustのポリモーフィズム
ポリモーフィズム(polymorphism):多相性 多態性
トレイトオブジェクトで異なる型の値を許容する
GUIライブラリの実装例を見ていきましょう
一般的なふるまいをトレイトに定義する
Drawトレイト
Drawトレイト実装するトレイトオブジェクト(
Box<Draw>
)Screenの実装を考えてみる
↓この方法はあまりよくない。Tの型が1つに制限されてしまう。。。
トレイトを実装する
Button型の実装を考える
あ
トレイトオブジェクトは、ダイナミックディスパッチを行う
― コンパイラがコードのインライン化するのを実効速度の向上がしにくくなる。
コードの柔軟性とのトレードオフなので、使用時は要検討
トレイトオブジェクトには、オブジェクト安全性が必要
オブジェクト指向デザインパターンを実装する
以下の内容を実装してみましょう。(それっぽいかはさておき。。。)
デモコード
Postを定義し、草稿状態で新しいインスタンスを生成する
記事の内容のテキストを格納する
草稿の記事の内容は空であることを保証する
記事の査読を要求すると、状態が変化する
contentの振る舞いを変化させるapproveメソッドを追加する
contentの振る舞いを変化させるapproveメソッドを追加する
h2
ステートパターンの代償
状態と振る舞いを型としてコード化する
状態と振る舞いを型としてコード化する
遷移を異なる型への変形として実装する
ブログ記事ワークフローの新しい実装を使うmainの変更
参考資料
https://doc.rust-jp.rs/book/second-edition/ch17-00-oop.html
ご清聴ありがとうございました