2019年9月16日月曜日

Learning Scala(本)勉強といくつかの整理03] オブジェクト、クラス、開発環境など

1. オブジェクト(object)
• 1つ以上のインスタンスを持つことができない形態のクラス
• オブジェクト指向設計では、シングルトン(singleton)という
• スカラは、Javaのstaticに対応するキーワードがない代わりに、オブジェクトをstaticのように使用可能
• Javaではクラスの中に存在する静的コードとクラスコードを、自然に分離可能
• newキーワードでインスタンスを生成する代わりに、名前で直接オブジェクトにアクセス





_________________________________
2. コンパニオンオブジェクトcompanion object
• クラスと同じ名前を共有し、同じファイル内でそのクラスに一緒に定義されるオブジェクト
• アクセス制御の観点では、コンパニオンオブジェクトとクラスが一つの単位とみなされるので、それぞれのprivate、protected、フィールドとメソッドに互いに接近可能






_________________________________

3. シングルトンパターン(singleton pattern)
• シングルトンパターン(singleton pattern)
 - ソフトウェアのデザインパターン
 - コンストラクタが複数回呼び出されても、実際に作成されるオブジェクトは一つ
 - 最初の作成後呼び出されたコンストラクタ:最初のコンストラクタが生成したオブジェクトをリターン
 - 主に、共通のオブジェクトを複数生成して使用するDBCP(DataBase Connection Pool)のような状況でよく使用
• 参考:staticの場合
 - 静的変数としてオブジェクトの作成→アプリケーションが実行されるときにオブジェクトの作成
 - オブジェクトが使用される前に、リソースを占める→資源の浪費


_________________________________
4. ケースクラス(case class)
• ケースクラス
 - 自動的に生成されたメソッドのいくつかを含むクラス
 - 自動的に生成されたコンパニオンオブジェクトを含む→このコンパニオンオブジェクトも自動的に生成された独自のメソッドを持っている
 - ケースクラスを使用せずに直接該当するメソッドとコンパニオンオブジェクトを追加して、同じ機能を実装可能


名称
位置
説明
apply
オブジェクト
ケースクラスをインスタンス化するファクトリメソッド
copy
クラス
要請の変更事項が反映されたインスタンスのコピーを返す
equals
クラス
他のインスタンスのすべてのフィールドが、このインスタンスのすべてのフィールドと一致する場合はtrueを返す。演算子==としても呼び出し可能
hashCode
クラス
インスタンスのフィールドのハッシュコードを返す。ハッシュベースのコレクションに有用
toString
クラス
クラス名とフィールドをStringに変換
unapply
オブジェクト
インスタンスをそのインスタンスのフィールドのチューブで抽出してパターンマッチングにケースクラスインスタンスを使用できるようにする。








_________________________________
5. トレイト(trait)
• トレイト
 - 多重継承を可能にするクラスタイプ
 - スカラはinterfaceがないが、traitで代替可能。
 - スカラのtraitは実装可能
 - クラス、ケースクラス、オブジェクト、トレイトは、複数のクラスを拡張することができないが、同時に複数のトレイトを拡張することはできている
 - ミックスイン(extendsキーワードを使用)の順番によって呼び出しメソッドが決まる
 - 線形化(linearization):継承されるクラスとトレイトの水平的なリストを受けて、クラスが別のクラスを拡張する垂直チェーンに再構成する段階







_________________________________
6. スカラー開発環境
• IDE
 - Eclipseの(プラグインが必要)
 - ScalaIDE(Eclipseがベース)
 - IntelliJ IDEA
• IntelliJ IDEA
 - スカラホームページ(https://www.scala-lang.org/)で推奨しているIDE
 - スカラIDEとして広く使われる
 - Ultimate edition、Community edition
• ビルドツール
 - SBT(Scala Build Tool):ユーザーが最も多い。事実上の標準
 - Maven
 - Gradle


_________________________________

• オブジェクトは、複数のインスタンスを持つことができない形のクラスで、これによりシングルトンパターンを実装可能である。
• スカラには、Javaにはあるstaticキーワードはないが、オブジェクトをstaticのように使用することができる。
• オブジェクトを使用して(Javaでは、同じクラスに存在した)静的コードとクラスコードを自然に分離することができる。
• ケースクラスは、自動的に生成されたいくつかのメソッドを含んでいる、インスタンス生成が可能なクラスであり、ケースクラスの利点は便利さにある。
• スカラのトレイトは、線形化を通じて複数の継承を可能にするクラスタイプである。
• スカラのIDEには、Eclipse、EclipseベースのScalaIDE、IntelliJ IDEAなどがある。
• スカラービルドツールはSBT(Scala Build Tool)、Maven、Gradleがあり、SBTが事実上の標準とみなされる。

0 件のコメント:

コメントを投稿