2018-01-01から1年間の記事一覧
まだまだ経験不足。UMLだけで全てが完結するわけではない。他にどんなツールがあるのだろうか。。。 UML クラス全体の関係性が明瞭になるため、特定のクラスのみが肥大化するのを避けられる 一方個別のメソッドの内部処理が不明のため、特定のメソッドの内部…
論理削除と物理削除 論理削除はフラグを設定するだけで削除は行わない。削除後の復元可能。 物理削除は削除を行う。削除後の復元はできない。 2層コミット 複数DBの分散トランザクション処理を実現する方式 複数DB間のトランザクションを1つのトランザクショ…
プリミティブ型と参照型 プリミティブ型はObjectを継承していないが、参照型(オブジェクト型)はObjectを継承している プリミティブ型はすべて小文字で始まるが、参照型(オブジェクト型)はすべて大文字で始まる。 プリミティブ型は値しかもたないが、参照…
UMLで用いる用語の整理 最近ようやくクラス図の偉大さがわかってきた きちんと設計するって大切 関連・汎化・集約の大きく3パターンあることをまずは抑える 関連 線でつなぐ 矢印の場合は方向性あり(ヘッダファイルのインクルードなど一方方向) 汎化 よう…
長いので終わらなかった。続きはまた今度。 プロセステーブル(プロセス制御ブロック) Kernelがプロセスの状態を管理するデータ構造 プロセスの生成 あるプロセス上で別のプロセスを実行すると必ず親子関係が生じる CLIコマンドを実行すると端末(bash)が…
デザインパターンでは継承においてメソッドのIFが共通化されているのが大きい 逆にいうとメソッドのIFを共通化できない場合だと単に処理の共通化可能くらいしかメリットがない Compositeパターン フォルダ&ディレクトリのような再帰的構造に利用される 継承…
移譲 サブクラスが機能拡張する際に、サブクラス内でのオーバロードや新規メソッドの追加ではなく、引数として渡されたクラスを用いること。 早い話が丸投げ。 自分では手を動かさずに外からきた人にやってもらう。 メソッドとしては持っているが自分ではや…
ファイルシステムの役割 当然だが新しい物理的な記憶装置が出現するとそれに対応したファイルシステムを利用する必要がある。 端的にいうと物理的な記憶装置を抽象化したレイヤーを提供する ファイルへのインタフェースを提供(ファイルの命名・フォルダ/デ…
Stacktrace 例外のthrow箇所で文字列を引数に与えることで、スタックトレース時に例外の発生状況を確認できる。 if (Objects.isNull(nextState)) { throw new NextStateException("Current State is " + name + ". " + "Next Character is " + currentString…
すっごい基本だけどthrowとthrowsの違いがわからなかった。。。 Javaの例外 try/catch:自身の中で例外を処理する throw:例外を明示的に発生させる throws:発生した例外を呼び出し元に通知する サンプル 以下のようにcatch内で例外を発生させる場合もある…
例外処理は真剣に考えると凄く難しい(そして面白い)。 例外処理の目的 例外の回復 例外の通知 例外の回復 例えばDBのにアクセスできない場合にリトライするなど。 そもそも回復できるという保証はない。 その場合は呼び出し元に通知する。 例外の通知 呼び…
ちょっと一日早いけど明日は書けるか不明なので。 単に言葉だけ知ってもしかたなくてベストプラクティスを学ぶのが必要。 例外そもそも論 例外が実装されていない言語(C言語)ではいちいち戻り値をif文で分岐する必要があり面倒。 そういう意味ではJavaの例…
エラーと例外は違う。 エラーや例外の実体はインスタンス。 「エラーが発生してプログラムが強制終了」「例外が発生してプログラムが強制終了」「例外が発生したがプログラムは強制終了しない」の3通りがあることを意識。 Javaの例外概要(大切) 土台とし…
昨日ちょっと書いたことの続き Javaの例外の概要 Javaでは例外が発生しうる処理を呼び出した時try/catch構文を用いて「例外を回復」するか、thorws句にてその例外を上位レイヤーに「通知」するかのどちらか どこで誰が「通知」「回復」するかは設計時に考慮…
UPSERT UPDATE + INSERTのこと データがない場合は新規追加を行い、データがある場合はその既存データを更新する ロックの種類 行ロック:レコードに対してロック 表ロック:表全体に対してロック Javaの例外 単に文法をしっているだけでなく、こういうアン…
スレッド処理の注意点 スレッド処理中にsleep処理を実装するのはあまり望ましくない DBアクセス中にsleepに入るとデッドロックの温床になりうる Visitorパターン 余り使う機会はなさそう thisを使うことで呼び出し元クラスに呼び出し先クラスそのものを受け…
↓のサイトは神レベルなので時間があるときに読み込んでおくこと qiita.com 「仕様の明確でないメソッドを作るのは迷惑行為です!」 「自分にしか理解できないコードを書くことは迷惑行為です!」 「API の仕様を説明できないのであれば、正しいユニットテス…
配列とList 配列は宣言時にサイズを決める必要がありサイズは固定のため変更ができない Listはサイズが可変のため必要に応じて変更できる List ListはCollectionsクラスを継承したインタフェース public interface List<E> extends Collection<E> { (略) } List</e></e>…
Springの構成 こういうのがあると本当に助かる。 qiita.com Java Beans 以下の要件を満たすクラス 引数のないコンストラクタが定義されていること アクセサメソッドが定義されていること(メンバ変数はすべてprivate) シリアライズ可能であること
Javaは1ファイル内に複数クラスを書くことができるが、1ファイル1クラスが原則。基本的に大規模開発向けの言語なので。 MavenもGradleもビルドツール。開発環境の準備〜コンパイル〜warファイルの作成〜デプロイまで一気通貫にしてくる。 WARファイル WARフ…
Tomcatは起動手順とかファイル構成とかがとにかく複雑。。。 Javaのプロパティファイル Propertyファイルとはキーと値が対になったデータを保存しているファイル プログラムのconfig値などを保存 コンパイルなしでプログラムの設定の変更が可能(ハードコー…
量子コンピュータの勉強会の発表無事に終わった。レベルが高くてびっくり。。。 Flyweightパターン 生成したインスタンスをプールに保存・共有するすることでリソースを節約する 別にオブジェクト指向とは関係ないような気が... Mementoパターン インスタン…
昨日は勉強会の資料作成のためブログ更新はできず。。。 Proxyパターン 呼び元と処理を実行するクラスの間に中間のクラスを生成する 処理の実行時に初めて処理を実施するクラスをインスタンス化する サンプルコードを見てインタフェースは要はAPIを実装する…
コンソールを開いた状態でttyコマンドを実行すると以下のように表示される。 $tty /dev/pts/1 ttyコマンド 標準入力に紐付いた端末やファイルを表示するコマンド そもそも linuxでは全てのIOはデバイスファイルを経由する そのためttyコマンドを実行した際に…
Bridgeパターン 継承と密結合 抽象クラスは機能を提供し、継承するサブクラスは実装を提供するという役割分担がある。 抽象クラスとサブクラスが密結合になるため、機能と実装が密結合となる。 そのためn個の複数の抽象クラスがm個の同じ実装を保つ場合は、n…
ズバリはっきり書かれていたのでメモ。 両者の役割分担はスーパークラスの抽象メソッドでAPIを定義し、継承したサブクラスで具体的なAPIの中身を実装する。 利用する側はサブクラスをスーパークラスの型に代入することで抽象度の高いスーパークラス経由で呼…
qiita.com デザインパターンっていっても全23パターンが重要なわけではないので注意。中には「これ特に命名するほどでもないよね!?」というのもある。 モジュール間の疎結合化を勧めていくと自然と同じことをやっていたことも多い。 以下順不同でつらつら…
Mavenは超便利!! Maven概要 開発環境管理ツール:既存プロジェクトをimportする場合にpom.xmlからmavenを更新することで、プロジェクトで利用中のライブラリ・プラグイン・フレームワークを一括で取得する。 ビルドツール:クラスファイルの作成、jarファ…
ブランチの種類 どの観点から見るかで呼び名が異なることに注意。 リモートブランチ:リモートリポジトリのブランチ。 リモート追跡ブランチ(masterブランチからは上流ブランチ):origin/masterのようなローカルリポジトリに存在するリモートリポジトリ相…
排他制御(ロック)に関しての整理 楽観的ロック データの同時更新が発生する頻度は低いことを想定。 データそのものに対してロックは行わずに、更新対象のデータが参照時と同じ状態であることを確認してから更新する。 データそのものは第三者からもアクセ…