アカウント名:
パスワード:
クラスを覚えたての人だとガンガン継承してしまいがち継承が多段になると「結局どれが実行されてんのよ」となってしまい、見通しが悪くなるこれを起こりにくくするためと言う側面がありますc++とかだとクラスを複数継承できるので、更に複雑さアップ。枝状に別れたスーパークラスをたどっていくと同じクラスがあったりして同名のメンバ変数があるが、どっちのクラスの変数なのかなど、もうわやになってしまう
そんなわけでクラスの継承は一個にしたいでも機能は複数持たせたいそこでクラスは一つだけ継承可、その他はインタフェイスで、って形になってます純粋仮想関数だけを持つクラスと本質的には一緒ですね# VB6以前では継承できるのはクラスのpublic関数だけ(インタフェイスとして利用できるだけ)、とかいうラジカルな仕様でだいぶブーブー言われてました
例外処理はエラーハンドリングを楽にするためのもので、起きるはずがないようなエラーや滅多に起きないエラーが出たときに一括で無難なエラー処理をさせたりするためのものです関数呼び出しのたびに返り値をチェックしてエラーだったら更にエラーを返して終了とか言うコードを書かなくて済むのでかなり見通しが良くなりますfinallyは「必ずそこを通る」ので、リソースの開放に使いますエラーリターン時など処理を途中でやめてreturnする時、必ずファイルを閉じなきゃいけないそんなときにfinallyで「ファイルが開いてたら閉じる」ようにしておくとファイルの閉じ忘れが無くなりお得です
強制したい機能を分割できること、ですかねぇ。オブジェクト解放時に破棄したいリソースを必ず破棄させる → IDisposableオブジェクト同士で比較できる → IComparableオブジェクトを文字列として表現できる → IFormattable抽象クラスの多重継承でも良いのですが、どうせ抽象メソッドだけになるのだし。
抽象クラスはそれこそオブジェクトやクラスの抽象的表現として使いたい。
インターフェースはインターフェースでしょ。USBとか車の給油口。それを実装しているものがなんのためのものかと何を受け取って何を返すのかを表現するもの。だから抽象的には同じだが具体的には違うことを…
わざわざUSBインターフェースなんぞ使わんでもarduinoでいいんじゃね?って話でしょ。あるいはキーボードキットなんかの標準HIDデバイスキット。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
Stay hungry, Stay foolish. -- Steven Paul Jobs
interfaceの良さ (スコア:0)
クラスを覚えたての人だとガンガン継承してしまいがち
継承が多段になると「結局どれが実行されてんのよ」となってしまい、見通しが悪くなる
これを起こりにくくするためと言う側面があります
c++とかだとクラスを複数継承できるので、更に複雑さアップ。枝状に別れたスーパークラスをたどっていくと同じクラスがあったりして同名のメンバ変数があるが、どっちのクラスの変数なのかなど、もうわやになってしまう
そんなわけでクラスの継承は一個にしたい
でも機能は複数持たせたい
そこでクラスは一つだけ継承可、その他はインタフェイスで、って形になってます
純粋仮想関数だけを持つクラスと本質的には一緒ですね
# VB6以前では継承できるのはクラスのpublic関数だけ(インタフェイスとして利用できるだけ)、とかいうラジカルな仕様でだいぶブーブー言われてました
例外処理はエラーハンドリングを楽にするためのもので、
起きるはずがないようなエラーや滅多に起きないエラーが出たときに一括で無難なエラー処理をさせたりするためのものです
関数呼び出しのたびに返り値をチェックしてエラーだったら更にエラーを返して終了
とか言うコードを書かなくて済むのでかなり見通しが良くなります
finallyは「必ずそこを通る」ので、リソースの開放に使います
エラーリターン時など処理を途中でやめてreturnする時、必ずファイルを閉じなきゃいけない
そんなときにfinallyで「ファイルが開いてたら閉じる」ようにしておくとファイルの閉じ忘れが無くなりお得です
Re: (スコア:0)
強制したい機能を分割できること、ですかねぇ。
オブジェクト解放時に破棄したいリソースを必ず破棄させる → IDisposable
オブジェクト同士で比較できる → IComparable
オブジェクトを文字列として表現できる → IFormattable
抽象クラスの多重継承でも良いのですが、どうせ抽象メソッドだけになるのだし。
抽象クラスはそれこそオブジェクトやクラスの抽象的表現として使いたい。
Re: (スコア:0)
インターフェースはインターフェースでしょ。USBとか車の給油口。
それを実装しているものがなんのためのものかと何を受け取って何を返すのかを表現するもの。
だから抽象的には同じだが具体的には違うことを…
Re: (スコア:0)
わざわざUSBインターフェースなんぞ使わんでもarduinoでいいんじゃね?って話でしょ。
あるいはキーボードキットなんかの標準HIDデバイスキット。