投稿

【書評】[Ivar Jacobson]モダン・ソフトウェアエンジニアリング

イメージ
Amazonリンク モダン・ソフトウェアエンジニアリング 著者について ivar jacobson ご存知UMLとかを策定した一人らしい。きっと有名人なんだろうね。 書評 書籍概要 標準化団体OMGによって規定された、「Essence」というエンジニアリングの共通的なやりかたについて、その詳解を記した書籍です。 以下ざっくり章の構成。 第1章 この業界、現場やプロジェクト次第で身につく能力とかまちまちですよね。 そんなのでいいの? 共通化できるよね! しました!とのこと。 第2章 そもそもプロジェクトやエンジニアリングなんてのは「なにをもって完了とすべきか」→「そのためになにを?」→「どのように?」で考えるべきで、手法を先に当てはめるものではないよね。 「アジャイルだ」「ウォーターフォールだ」ではなく、ユースケースやユーザーストーリーなどからいいとこ取りして、自分たちに最適なやり方でやろうぜ! とのこと。 第3章 そこで、Essenceです。 いろいろなエンジニアリングで必要不可欠な要素を切り出したりまとめたりして、標準化しました! もうウォーターフォールやアジャイルみたいなパッケージ化された手法に頼らず、全てを自分たちに必要な形で採用することができます! 第4章~第7章 というわけで、顧客、ソリューション、活動、という3層だったり、顧客[機会、ステークホルダー]みたいな細分化だったりを詳解するよ。 あとの章 実際にスクラムチームに適用してみよう。もっと大きな会社構造を表現してみよう。など。 Q. 表題のモダンソフトウェアエンジニアリングとは? A. Essenceです(ドヤァ) Essenceは「カーネル」という、エンジニアリングの本質を表すことができます。 それらは以下となります。 アルファ[Alphas] : エンジニアリングに存在する、必要不可欠な要素です。以下で説明します。 アクティビティスペース[Activi

【書評】[Robert C.Martin]Clean Architecture 達人に学ぶソフトウェアの構造と設計

イメージ
Amazonリンク Clean Architecture 達人に学ぶソフトウェアの構造と設計 著者について Robert C. Martin。通称「アンクル・ボブ」 50年ぐらいはエンジニア業界に携わってきている、おそらく業界での有名人の一人。 日本でも有名な著書がいくつかある。 CleanCode 、 CleanCoder など。 書評 書籍概要 ソフトウェアエンジニアリングに於いて、アーキテクチャをクリーンに設計するということはどういうことか、その概念を明示し、詳解する書籍。 まずはエンジニアリングの歴史やセオリーを読者に示す。 続けてアーキテクチャの説明を行いつつ、クリーンなアーキテクチャについて詳解する。 その後、変更が多い部分を「詳細」として例示する。 最後に、レイヤードアーキテクチャなどとの相違点や、実践方法などをゲスト執筆者を交えて記載している。 表題の「クリーンなアーキテクチャ」とは 中心となるビジネス要素はしっかり固めておいて、それ以外はいつでも変更可能となるようなアーキテクチャの形状のこと。(概念、考え方) 技術話とかになると書評枠から外れてしまうので、具体的なものはクリーンアーキテクチャでググってください。 有用性 最近(2020年ごろ)のプロジェクトではよく採用されている方針・考え方。 設計を行う人は一度は読んでおいたほうがよい。 概念図は有名なドーナツっぽいあれで、なんならあれがすべて。 原則などの考え方はいつでも有用なので、やり方、考え方は押さえておくととてもよい。 本書の読み方 クリーンアーキテクチャについての記述は後半からになっているので、ある程度のエンジニアはそこまで流し読みでも問題ない。 前半はあくまでもチュートリアルとか予習・復習のフェーズ。 第5部からアーキテクチャ論。 更に、第22章からようやく「クリーンアーキテクチャ」。 点数(10点満点) 対象読者 : ソフトウェアエンジニアリングでの設計の価値をわかり

【書評】書籍タイトル一覧

イメージ
自分用、書評のタイトル一覧です。 ここは随時更新していこうかなと思います。 タイトル一覧 No. 書籍カバーとタイトル(アマゾンリンク) 一言で 書評ページ おすすめ度 1 Clean Architecture 達人に学ぶソフトウェアの構造と設計 長くエンジニアリングに携わってきた著者がたどり着いたアーキテクチャの本質を語る。 信者が多く、その意味でも一読すべし。 こちら ☆5 2 モダン・ソフトウェアエンジニアリング エンジニアリングというものは、実はEssenceという名称で標準化されてるよ。では説明しよう! という本。 こちら ☆4 3 リファクタリング・ウェットウェア ―達人プログラマーの思考法と学習法 一口に「スキルアップをする」というが、それはどういうこと? と疑問に思ったらぜひ。 xxx ☆5 4 リファクタリング(第2版): 既存のコードを安全に改善する (OBJECT TECHNOLOGY SERIES) 定番本。ただのコーダーから一段成長したい御方は読むしかないと思う。企業勤めだと2年目とか早いうちに読まされるのでは。 xxx ☆5

Java本格入門 Chapter11 スレッドセーフをたしなむ の一部をJavaで実装。

イメージ
Java本格入門 Chapter11 スレッドセーフをたしなむ の 11-2-3(1)異なるクラスのsynchronizedメソッドは、同期しない。を実装。 書籍の簡略コードではいまいち刺さらなかったので。 実装の参照元ネタ こちらのサイト様のコードを写経させていただきました。 abcdefg..... : Javaでsynchronizedの排他制御を試す ファイル一覧 MyMain.java 実装 MyMain.java public class MyMain { public static void main(String[] args) { MyMain aaa = new MyMain(); aaa.test27(); System.out.println("★★★★★"); } // マルチスレッドでのsyncronized範囲確認 private void test27() { final class AAA { public synchronized void func3() throws InterruptedException { System.out.println(Thread.currentThread().getName() + " : ★ start"); Thread.sleep(2000); System.out.println(Thread.currentThread().getName() + " : ★ end"); } public synchronized void func4() throws InterruptedException { System.out.println(Thread.currentThread().getName() + " : ○ start"); Thread.sleep(2000); System.out.println(Thread.currentThread().getName() + " : ○ end"); } } final class BBB

Game Programming Patterns の 第8章 ダブルバッファのコメディ部分をTypeScriptで実装

イメージ
Game Programming Patterns の 第8章 ダブルバッファのコメディ部分をTypeScriptで実装 お勉強。 1フレーム(update())ごとにバッファを入れ替える。 ファイル一覧 doubleBuffer.ts 実装 doubleBuffer.ts abstract class Actor { constructor(name: string) { this.name_ = name; this.currentSlapped_ = false; }; abstract update(): void; public swap(): void { this.currentSlapped_ = this.nextSlapped_; this.nextSlapped_ = false; } public slap(): void { this.nextSlapped_ = true }; public getname(): string { return this.name_ } protected wasSlapped(): boolean { return this.currentSlapped_ }; protected name_: string; private currentSlapped_: boolean; private nextSlapped_: boolean; } class Commedian extends Actor { // 顔の向き public face(actor: Actor) { this.facing_ = actor }; public update(): void { // console.log("name,wasSlapped : " + this.name_ + "," + this.wasSlapped()) if (this.wasSlapped()) { // 自分が叩かれてたら、こんどは顔が向いている方向にいる役者を叩く(どんなコメディだよ) this.facing_.slap()

HeadFirstデザパタ 第10章 State をC++で実装

イメージ
自分のお勉強用 : HeadFirstデザパタ 第10章 State をC++で適当に実装 おさらい。 とりあえずStateAとBを順繰りに入れ替えるようなやつ。 お手本を真面目に写経するのは冗長なのでパス。 ファイル一覧 State.h : インターフェイス StateA.h と StateA.cpp : 実装 State.h と StateB.cpp : 実装 GumballMachine.h と cpp state_cpp.cpp : メインクラス 実装 State.h : インターフェイス #ifndef STATE_H #define STATE_H class State { public: virtual ~State() {} virtual void methodA() = 0; virtual void methodB() = 0; }; #endif // !STATE_H StateA.h #ifndef STATE_A_H #define STATE_A_H #include "State.h" #include "GumballMachine.h" class StateA : public State { friend class GumballMachine; public: StateA(GumballMachine* gm):gm_(gm) {} virtual void methodA() ; virtual void methodB() ; private: GumballMachine* gm_; }; #endif // !STATE_A_H StateA.cpp #include "StateA.h" #include using namespace std; void StateA::methodA() { cout << "StateA::MethodA" << endl; } void StateA::methodB() { cout << "StateA::MethodB" << endl; gm_->se

増補改訂版Java言語で学ぶデザインパターン入門 結城 浩 第6章 Prototype をC++で実装

イメージ
自分のお勉強用 : デザパタ 結城本 第6章 Prototype をC++で適当に実装 C++とデザパタのリハビリを目的として。 Flyweightとなんか脳内で混同してしまう。まぁコンセプトは似てるし仕方ない。 ファイル一覧 Product.h : インターフェイス ProdA.h と ProdA.cpp : 実装 ProdB.h と ProdB.cpp : 実装 Manager.h prototype_cpp.cpp : メインクラス 実装 Product.h : インターフェイス #pragma once #include using namespace std; class Product { public : virtual ~Product() {} virtual void use(string s) = 0; virtual Product* createClone() = 0; }; ProdA.h #pragma once #include "Product.h" class ProdA : public Product { public: ProdA(string s):deco_(s) {} virtual void use(string s) override; virtual Product* createClone() override; private: string deco_; }; ProdA.cpp #pragma once #include "ProdA.h" #include using namespace std; void ProdA::use(string s) { cout << deco_ << " : " << s << endl; } Product* ProdA::createClone() { return new ProdA(deco_); } ProdB.h #pragma once #include "Product.h" class ProdB : public Product { public: ProdB(stri