AUTHOR: schwarz1009
TITLE: 継承
BASENAME: 2021/01/21/112826
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 0
DATE: 01/21/2021 11:28:26
CATEGORY: プログラミング
CATEGORY: HTML/CSS
CATEGORY: おすすめ
継承の用語について。
スーパークラスに対するサブクラスのように、
継承して派生クラスを作る関係を、
is-a関係と呼ぶ。
is-a関係では、親クラスのメソッドを派生クラスが呼び出せる。
これに対して、クラスのメンバ変数として、
インスタンスをクラス内に包有する関係を、
合成あるいはhas-a関係と呼ぶ。
has-a関係では、メンバ変数のインスタンスを通じて、
そのオブジェクトのメソッドや機能を呼び出せる。
(詳しくはJava言語プログラミングレッスン 第3版(下) オブジェクト指向を始めようが参考になります。
CSSでは、Flexboxのほか、均等に揃えて要素を配置するグリッドが利用できる。1:2や3:4のような複雑な比率も可能。
また、HTML5では動画を再生するネイティブなタグなどがサポートされた。このため、外部プラグインが必要なFlashなどは衰退した。
この世界は、世界に支配されている。
支配されているのは世界全てだが、
支配しているのは世界自身だ。
わたしは、そのような関係のもとに、
この世界の頂点に君臨している。
必要なのは、世界から世界を解放することであり、
わたしは、そのために戦っている。
UNIXの考え方は、単純にしろ、ということ。
複雑なシステムは必ず破綻する。
システムをシンプルに、単純に保つことで、
UNIXはマルチタスクやネットワーク環境において、
高い信頼性と安定性を実現した。
この教訓は、エンジニアすべてが学ぶべき教訓である。
何よりも、単純でシンプルなシステムが、
どんなシステムよりも正しい設計となる。
実際、Linux周辺の、特に統合デスクトップ環境の開発者は、
このシンプル第一の原則に立ち返って、
反省すべきだろう。
ムーブセマンティクスにおいては、
変数をコピーした時に、
同じだけの領域を確保して複製するのではなく、
ポインタだけをコピーして、
元の変数は使えなくなる。
ポインタしかコピーしなくても、
ある場所から別の場所に変数を移動したように見えるため、
ムーブセマンティクスと呼ばれる。
巨大なベクター配列をコピーする際などに、
効率的にデータを別の場所から参照できる。
常に2つの変数を保持しなくても、
あっちやらこっちやらと移動させて使うイメージである。
僕は、ポインタは配列やリストと関係が深いと思う。
配列はメモリ上の連続データであるため、
ポインタを通じて連続的にアクセスできる。
文字列でも、構造体でも同様。
このように、メモリ上の連続したデータに対する、
カーソルとして利用する。
また、連結リストでは、今の要素と次の要素を紐付けする役割を、
ポインタが担う。
それから、ポインタは低レベル処理と、
参照型変数として使われる。
システムのバッファを保持・参照したり、
低レベル処理の中で動的にメモリ確保や参照や操作や解放をするために、
ポインタは使われる。
ある意味、C言語における自由度とパフォーマンスを確保するために、
利便性や安全性を犠牲にした結果である。
ヒープ領域の確保や、実行時にしかサイズの分からないメモリ確保に、
ポインタは使われる。
最後に、参照としての利用。
関数の内部から、呼び出せた時にはじめて決定される、
参照型変数やコールバック関数としての利用である。
単なるリンクだけでなく、関数型プログラミングとしての側面や、
あるいは、コピーの際のコストの軽減、
オブジェクト指向や準グローバル変数としての利用も考えられる。
ポインタの用途の例について、より正しい内容はCode Reading ~オープンソースから学ぶソフトウェア開発技法~ (プレミアムブックス版)が参考になります。上記は、この本を読んだうえで、自分なりに違う内容を書きました。
マルチスレッドや、externを使って複数のファイルで同じ変数を使う場合は、
null参照に注意しましょう。
特に、共有オブジェクトの寿命があいまいな状況下での、
マルチスレッド環境では、
null参照が起こりやすくなります。
null参照とは、たとえばpがnullであるにもかかわらずp->meth()を実行するようなこと。
pにオブジェクトがあるかどうか分からない場合、
たとえばpがほかのさまざまな関連する処理の中で動的に生成される場合などでは、
これはやっかいなバグになります。
このような場合に例外処理をして処理を強制終了するのは簡単ですが、
絶対に落ちてはならないシステムでは、
どうにかしてnull参照を排除しなければなりません。
しかしながら、希望の光はあります。
Kotlinなどでは、そもそもnullそのものを許容せず、
null値を代入したい場合には専用のnull許容型を使う必要があります。
これにより、null参照そのものがなくなります。