Because We Love Happy Coding

フリーライターがPHPとかJavaとか勉強してます

Javaの勉強5

f:id:mogami74:20160225132733j:plain

ラッパークラス

基本データ型を参照型オブジェクトにしたもの。要するに、何でもオブジェクトにしちゃえば、メソッドも付けられて便利だよね、というオブジェクト至上主義ですよね(暴論)。

Autoboxingは、プリミティブ型をラッパークラスに変換する自動処理。

Generics

型を一般化したもの。これも「オブジェクトなら何でも処理しちゃうぜー」というオブジェクト至上主義ってことでいいよね。

こうなると、文字通り「何でもオブジェクト」だよなー。オブジェクト指向は偉大な発明だな。

Javaの勉強4

f:id:mogami74:20160306115355j:plain

クラスパス

-classpath.;c:¥classes セミコロンの意味は、パスの区切りということらしい。この場合、ドットとclassesと2つのパスを指定しているってこと。

例外

一般的例外と業務的例外。一般的例外は、Java上で用意されているもの。業務的例外は、主にユーザー定義例外。

チェック例外と非チェック例外。チェック例外は、外部システムとの境界のような、例外処理が必須になる部分。非チェック例外はシステム内部できちんと潰しておけば例外処理しなくてもいい部分。

Javaの検査例外は、呼び出し側の責任でない異常系 - Qiita

Javaの検査例外は、呼び出し側の責任でない異常系 - Qiita

throws は三単現のs。クラス名に付ける宣言。例外処理を呼び出し元に丸投げする宣言。
throw は命令文。例外をスローする、というヤツ。

実際の授業で「三単現」と「命令文」の話をしたら、同僚の先生に「今のできっとみんな覚えましたね」と誉められたな。

授業では例外処理のイメージを理解してもらうのが難しかったんだけど、「ソフトが強制終了してWindows が謝る」とか「異常終了の内容を送信しますか?ダイアログ」なんかを例外処理の例として挙げたらわかりやすかったかもしれない。

Collection API

Javaの近年のバージョンで追加された、集合を扱うAPIArrayListとか要素追加できて便利ね。

Javaの勉強3

f:id:mogami74:20170611084200j:plain

UML

コンポジション

以下の記事がわかりやすかった。

集約もコンポジションも「全体 - 部分」の関係。 集約は、モデリングする際には無視する(?)。関連と意味合いには変わらないので関連で表現できる。 コンポジションは、1つの部分インスタンスに対して最大1つの全体インスタンスで構成される。 最大1つなので、全体インスタンスの多重度は「0..1」もしくは「1」のどちらかになるはず。 部分インスタンスの譲渡や破棄などの責務を所有している全体インスタンスが担うことができる。 全体インスタンスと部分インスタンスのライフサイクルが完全一致しなくてもよくなった。 --via UMLの集約とコンポジションの違いについて - 目指せ!三流エンジニア

あと、こちらも役に立ちそう。

誤解しがちなモデリングの技:第1回:コンポジションにまつわるアレコレ | 豆蔵ソフト工学ラボ

誘導可能性

可視性と同じような意味で考えればいいのかな?

関連はデフォルトでは双方向性を持ちます。これは、関連から生成される2つのオブジェクトは両方相手を知っており、お互いにメッセージを交換し合うことを意味します。しかし、明らかに片方のオブジェクトからしかメッセージを送る必要がない場合に双方向性を持つとするならば、実装局面においてはプログラムコードに冗長性をもたらすことになります。また、モデルの意味上においても分かりづらさをもたらしてしまいます。このようなときには、関連の端に矢印を書くことで、関連の方向性を明確にします。図13では、明細から商品に向けて矢印を書くことで、明細は商品を知っているが、商品は明細を知らないという意味をモデルに付加しています。こうすることで、商品クラスが明細クラスから独立していることを強調することができます。このように関連の方向性をつけることを誘導可能性と呼びます。 --via 【改訂版】初歩のUML:第6回 「関連」の理解をさらに深める - ITmedia エンタープライズ

Javaの勉強2

f:id:mogami74:20170611082953j:plain

ポリモフィズム

似た機能のメソッド名を同じ名前に設定できることでアクセスの利便性を図ること。

抽象クラス、抽象メソッド

具体的な処理内容がないメソッドを抽象メソッドと呼ぶ。抽象メソッドを含むクラスを抽象クラスと呼ぶ。

抽象クラスでは、オブジェクトを生成できない。主にスーパークラスとして用いられる。

処理内容がないメソッドは、抽象メソッドと呼ばれ、ブロックを示す{}がなく、セミコロンのみ。

抽象クラスは、具象メソッドを持っていてもいいい。インターフェースは、具象メソッドを持っていてはダメ。

抽象クラスは単一継承のみ。インターフェースは多重継承が可能。

参照型のキャスト

暗黙のキャスト

サブクラスのオブジェクトをスーパークラス型の参照変数に代入できる。これには明示的なキャストは不要。

基本的にはキャストした先(スーパークラス型)のメソッドだけしか利用できないので、サブクラスのみに設定されたメソッドは使用できなくなる。

ただし、オーバーライドされたメソッドはキャストした状態から使用できる。これはたとえば、スーパークラスとサブクラスでポリモフィズム的観点から同じ用途のメソッドを用意しているようなパターンになるはず。

ダウンキャスト

スーパークラスの参照変数をサブクラスの参照変数に代入する際は明示的にキャストを行う。これをダウンキャストと呼ぶ。

シグニチャ

シグニチャ」はメソッド名、戻り値の型、引数の型と個数を組み合わせたもの、と勉強中のテキストにはあるんだけれど、主にメソッド名と引数の型リストを指すことが多いみたい。

つまりオーバーロードとは「シグニチャが異なる」メソッドを記述する行為になる、かな。

逆に言うとオーバーロードされたメソッドを呼び出す場合は「シグニチャが一致する」ものが選ばれて実行される、ということになる、はず。これなら「signature」という単語の意味とも合致するし。

インターフェース

「インターフェース」として複数の抽象メソッドを定義しておくことができる。

この2つ(だけ)を行う。実行内容は定義しない。

1つのクラスが複数のインターフェースを多重実装することもできる。

実装クラスでは、インターフェースに存在するすべての抽象メソッドを実装/オーバーライドする必要がある。もし実装していないメソッドがある場合はabstract宣言して抽象クラスにならなければならない。

参考記事

Java 入門 | インタフェース

Java SE 8 でのメソッド継承のルール - 映画は中劇

Javaの勉強1

f:id:mogami74:20170611082215j:plain

領域

これについては私は学校で教わらなかったので、よく勉強しておかないといけない。

領域図

これも学校では描かなかった。変数設計ってことだよね……。

自分でPHPを描いた時には、スーパーグローバル変数だけとりあえず変数一覧を作成していた。でないと、あちこちで設定した変数名が同じだったり書き間違えたりで悲惨なことになるので。

「入出力領域」と「作業領域」の具体例がピンと来ないけど、まぁおいおい。

個別データ記号

「順次アクセス」って何だっけ。

https://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%BC%E3%82%B1%E3%83%B3%E3%82%B7%E3%83%A3%E3%83%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9ja.wikipedia.org

ああ、ランダムアクセスの逆ね。直接アクセスって日本語では言ってるのか。

制御移行

他のプログラムの呼び出し……ね。成ル程。

ANDゲート

見慣れない記号があったので調べてみた。 https://ja.wikipedia.org/wiki/AND%E3%82%B2%E3%83%BC%E3%83%88ja.wikipedia.org ふむ。遅延と同じ意味ってのは、どうも電子回路の流れらしいから、その辺が理解できてないとピンと来ないな。

学習したい項目リスト

勉強したい項目をwri.peにメモっていたんだけど、あちらは開発ネタに特化しておきたいので、こちらに書いておくことにする。時々更新。

since 2017-04-13(木)

「学習項目」はおよそ高い確率で学習するもの。「検討中」は、単語の意味がまだよくわからない、潮流がよくわからないなどの理由で調査中・検討中のもの。

リストは順不同。気が向いたら、優先順位つけるかもしれないけれど、でもたぶんその時々の開発状況によって優先順位はころころ変わりそうな気もする。

学習項目

JQuery

MySQL

パスワード認証

ajax

angularJS

LESS, Sass

Bootstrap

GoogleAppsEngine

JavaMail

PHPでのExifデータ読み込み

印刷仕様特にMac

VBA

Java GUI アプリ開発

VPS

ドットインストールに「さくらのVPS」がらみの動画があるらしい。

検討中

Laravel

https://readouble.com/laravel/4.2/ja/quick.htmlreadouble.com

https://c-rtx.com/2015/09/22/laravel-on-sakura-rental-server/c-rtx.com Laravel 5.1 のインストールlaravel10.wordpress.com laravel10.wordpress.com blog.livedoor.jp http://laraweb.net/environment/674/laraweb.net

SSH

sourceforge.net SSHクライアント。

help.sakura.ad.jp

CoffeeScript

webpack

Autoprefixer

TypeScript

TypeScriptはMicrosoftによって開発された”静的型付けクラスベースオブジェクト指向言語”です。 --via 今時のフロントエンド開発2017 (1. 愚痴編) - Qiita

  • PHPメール送信

文学部卒ノンプログラマーのフリーライターが作りたいWebサービス

f:id:mogami74:20170412071553j:plain

私は文学部卒で(といってももう20年近く前に卒業したんであまり意味はないが)、一昨年会社(製造業)を辞め、昨年一年間は学校に通って、HTML、CSSJavaScriptPHPJavaを学んだ。まだ実務経験はない。春からはフリーライター(前職の前はフリーライターだった)や講師業をしている。

いろいろやってる人たち

ferret-plus.com

こんな記事を読むと、やはりプログラミングしたい、サービスを公開したいという欲求を持った人はいろいろあるものだ。なんとなく会社を辞めた自分がやると脱サラして蕎麦屋(あるいはペンション)を始める感覚に似ているのだがそれって昭和的な感覚だろうかね。え、もしかして一種の死亡フラグ? 

作りたいもの

wri.pe」に開発メモを作って、作りたいものをまとめてある。どういう順番で手を付けるかが今のところ悩み。悩みというほどでもないか。贅沢な悩みだな。

自分の考えているアイデアのうちで、「人をポジティブにするWebサービス」という切り口でまとめられるものが3つあったので、これは「PositiveScript」という名前でシリーズ化しようかな、と思っている。これはイメージがそこそこ見えているので、早く形にしたい。

一方で、自分用のデータベースを作りたいという欲求もある。日々の生活を便利にしたり、あるいはライフログをとって、その中身をブログに活かしたりといったことを考えている。これは日々蓄積するものなので、早くスタートさせたい。データベースとテーブルは既に思いついたら作るようにしているので、少しずつ蓄積はしてるけれど、MySQLを直接叩くのは(PhpMyAdmin経由とはいえ)やはり手間がかかる。DAO(DatabaseAccessObject)の勉強という意味でも早めにやりたいところ。

あとブログの機能追加。CSSPHPWordPressの知識がついたので、いろいろいじりたいところがあって、特に以前、演算処理が面倒で2回諦めた企画もの(文具ブログ)については、再挑戦したいと思っている。3度目の正直のたぶん今なら(というか今度こそ)できるはず……!

勉強も……

employment.en-japan.com

こういうの読むと、業務レベルでは(もう)PHPあんま使われてないんだなー、という気がする。Ruby on Railsの方が多い。それどころかPerlってどこ行っちゃったんだ? メルカリとはてなブログはまだPerl使ってるみたいだけど。

そういうわけでRubyはちょっと興味ある。フレームワークも、Laravelとか。あとSwiftやObjective-C。自分がメインで使っているのがMaciPhoneなので、自分で使いやすいアプリとか作りたいなぁ。

と思うと、やることがありすぎてパンクする。

手を動かす

とりあえず手を動かさないといけない。Keep the Circle Turning.

幸い、友人がプログラミング部活的なものを月1回やろうと言ってくれている。上記のどれかを持ち込むことになると思う。

作って人に見せて面白いのはPositiveScript Level1かなー。文具ブログかどっちかだと思う。両方企画持っていって、他の人の反響や動向を見ながら決めようかな。