先日この「クニ吉」の読み方を「くによし」と思っている方がいたのですが、正しくは「くにきち」です。私の苗字には「くに」が入っていて、会社で「くに太郎」やら「くに吉(きち)」やら呼ばれていたので、それを使いました。最近は「タロさん(太郎が変化)」と呼ばれてて、もう私の要素が全くないのですが・・・;執筆者名を「くにきち」と平仮名にしようかなと思いつつ、とりあえず現状維持で。(そのうちいきなり変わるかもしれません。)さて、今回は「クラス」について書きたいと思います。本ブログの構成クラスとはクラスの宣言クラスに付与できる修飾子クラス名の決定まとめおわりにクラスとはJavaのソースコードは、フィールドやメソッドという処理内容を記述しているものなどで構成されています。足し算をしたり引き算をしたりといった処理はフィールドやメソッドで記述されますが、そういったフィールドやメソッドをまとめているのが「クラス」です。フィールドやメソッドなどのクラスの構成要素を「メンバー(または、クラスメンバー)」と呼びます。メンバーはなんでもいいわけではありません。「class」には「同じような人・物の集まり」という意味がありますが、Javaのクラスも「同じ性質」のメンバーを集めます。冒頭の足し算や引き算をするメソッドは「計算をおこなう」という同じ性質を有しているため、「Calculation」というクラスを作成できます。Calculationクラスは何か計算をしてくれるものなんだな、ということが直感的にわかります。クラスの宣言このブログの第一回目でも登場したHelloWorldクラスですが、この部分が「クラスの宣言」ですね。...(処理)}クラスの宣言は以下のようなルールで記述します。修飾子は様々な効果や制限を付与します。「クラスに付与できる」と書いた通り、修飾子はクラスだけではなく、フィールドやメソッドにも付与できますが、この項ではクラスに付与できるもののみを記述します。(クラスの中に定義するクラス(内部クラス)も今回は除外)修飾子の説明の中で「?」なものがあると思いますので、後述の「クラス修飾子およびキーワードに関連する補足」を併せてご確認ください。アクセス修飾子アクセス範囲を指定する修飾子のことで、指定された修飾子によりクラスのアクセス可能範囲が異なります。クラス宣言で使えるアクセス修飾子は2種類です。同一パッケージ内のクラスからのみアクセスを可能とするクラスとなります。(パッケージプライベート)※補足ありそれ以外の修飾子アクセス修飾子に追加して付与することができる修飾子で、クラスの性質を明記します。継承されるクラス(スーパークラス)に付与します。継承されたくないクラスに使用します。}クラス宣言に関係するキーワード修飾子とは異なる、クラスの性質を明記するキーワードがあります。継承するクラス(サブクラス)に付与します。インターフェースの実装クラスに付与します。修飾子やキーワードについて書きましたが、パッケージやスーパークラスなど「?」なものがあったと思いますので、こちらでざっくりと補足説明。パッケージとはクラスは同じ性質のメンバーをまとめたものと書きましたが、パッケージはクラスやインタフェース(※後述)をカテゴリーなどでまとめたもので、階層構造で管理します。パッケージプライベートとはアクセス修飾子の中で出てきた「パッケージプライベート」とは、同じパッケージ内にあるクラスからであればアクセスできる、というもので、上図でいうとclassDがパッケージプライベートの場合、classAやclassBからはアクセスできないことになります。(classFはアクセス可能)パッケージが異なる場合は全く別物と扱われるので、別パッケージで使用されているクラス名をつけることもできます。スーパークラスとサブクラスとはスーパークラスとサブクラスを説明する際に「継承」という仕組みを理解する必要があります。クラスは子どものクラスを持つことができ、親クラスのことを「スーパークラス」、子クラスのことを「サブクラス」と呼びます。サブクラスはスーパークラスの持っている値やメソッドを使うことができ、これを「継承」と言います。親の能力を子どもが継承し、さらに子どもはさらなる能力を持つことができるというイメージです。共通する機能はスーパークラス(親)が持ち、個別の機能は抽象化して、サブクラスで抽象化した機能の実装を記述する、などといった感じで利用します。スーパークラスで抽象化したメソッドを「抽象メソッド」と呼び、抽象メソッドを持つクラスは「抽象クラス」と呼びます。サブクラスであることを表すインターフェイスとはインターフェースとは、抽象メソッドしかもたない「クラスのようなもの」です。implementsを付与したクラスを「インターフェースの実装クラス」と呼び、実装クラスではインターフェースに記述されているすべての抽象メソッドの実装を記述する必要があります。以下のような使い方ができます。・・・など、以下のイメージ図をご参照ください。実装クラスはインターフェースを通じて呼び出しを行います。利用する側は、それぞれの実装クラスを指定せずに呼び出しができますので、仮に「小文字を削除する文字加工」という実装クラスが増えたしても、呼び出し側のソースコードを変更する必要がありません。インターフェースが実装クラスを包んで外側へ処理を隠しているように、詳細なデータやメソッドを外側から隠蔽することを「カプセル化」と言います。抽象クラスとインターフェースは似ていますが、両者は以下のような感じで使い分ければいいと思います。インターフェースの実装クラスであることを表す今回はクラスの話なので、この辺で。第一回目のHelloWorldクラスでは、「HelloWorld」がクラス名にあたります。クラス名は必ず大文字から始め、「名詞」にすることを意識しましょう。名前、超重要!「クラスとは」の項で「直感的にわかります」と書きましたが、名前付けは本当に重要です。このクラスは何をしてくれるのか、このメソッドは何をしてくれるのか、この変数は何を格納してくれるのか・・・。ひとつのシステムを動かすのにはたくさんのクラスやメソッド、変数を定義する必要がありますが、そのひとつひとつが何をしているのかわからない名前だと、そのクラスやメソッドを使う側はソースコードを全て読まなければなりません。そのために名前付けや、今回は書きませんが「Javadoc」というソースコードの中に書く説明文を記述することがとても大事です。コードは書くよりも読む時間の方が圧倒的に多いと言います。「3日後の自分は他人」と言うほど、自分のソースコードでさえも少し時間が経っただけで読めなくなるくらいなので(過去、Accessで自分の書いたソースコードがわからなくなった経験あり;)、ソースコードの可読性は極めて重要です。そのひとつとして名前付けについても軽視せず、そのクラスやメソッドを「名前」で表現できることが理想です。(私も師匠に突っ込まれたりしているので、命名道を極めるには先行き長め・・)ちなみに名前付けを支援するサイトもあるようなので、こういったものを試してみるのも良いかもしれません。名前付けに関するブログなどでもいろいろあり、参考になります。-名前付け-うまくメソッド名を付けるための参考情報まとめクラスとは「同じ性質の処理」をまとめたもの修飾子はクラスのアクセス範囲や特徴を表現するものクラス名は「名詞」にし、大文字から始める名前は重要(ネーミング辞書やさまざまな記事が参考になる)おわりにパッケージやらインターフェースやらの説明を書いたら、長くなってしまいました。自分の備忘録兼私みたいな非エンジニアでも始められうように・・と思って書き始めたけど、どう書いていくべきか悩んだりします。1,194,337漫画大好きなしがないOLです。リモート】クラスメソッドの会社説明会を開催しますクラスメソッドでは、AWS・AI・ビッグデータ・モバイルなどの技術職や営業のメンバーとして一緒にお仕事をする仲間を大募集しています。#cmdevio新型コロナウイルスの感染拡大を受け、本イベントを延期させていただくことになりました(開催時期未定)。お申し込みいただいた皆様には大変申し訳ございませんが、何卒ご理解いただけますようよろしくお願いいたします。AWSについてライトに色んな情報交換をしましょう。カフェ店長のオカノです。今日はオフィスに用があるので、通勤ラッシュを避けて出社しました。この子は新メンバーのさめくんです。在宅勤務が推奨されているのでオフィスが閑散としており、すこしさみしそうです。使いたいときの注意点を書きました。本が出ていたので読んでみたところよかったので紹介させていただきます。