質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

4回答

3544閲覧

アスペクト指向について

earnest_gay

総合スコア615

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

1グッド

1クリップ

投稿2016/09/10 13:42

JavaにおけるAOP(アスペクト指向)について、
正確な説明はしなくて良いので、比喩を用いて低学年が理解できるように説明してください。

※問題みたいになってしまいましたがよろしくお願いします。

LLman👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

低学年向けですか。こんなのはどうでしょうか。


アスペクト指向というものについてバケツリレーで説明するよ。
みんなでバケツリレーをします。その途中に別のクラスのお友達を入れてあげることにしよう。
でもみんなの列は変えずにお友達を入れてあげたい。
入れてあげるんだけどみんなの列はそのままなんだ。
その時に使うのがアスペクト指向という考え方。
どこでお友達を入れてあげるかは決めてあげて、みんなの列のその位置の隣にお友達に立ってもらうんだ。
バケツは隣にお友達がいるところになったらお友達を介して後ろの人に渡るんだ。

みんなだけのバケツリレー
○→○→○→○→○→○→○→○→○→○

アスペクト指向のバケツリレー
決めたこと:お友達(●)には5番目に入ってもらいます。
○→○→○→○ ○→○→○→○→○→○
'   └●┘

みんなの列に友達を入れてあげる方法としては(現実世界では)普通こう並ぶよね。

みんなと友達のバケツリレー
○→○→○→○→●→○→○→○→○→○→○

アスペクト指向の並び方は違っているよね。アスペクト指向の特徴は「みんなの列は変わらない」ということなんだ。最初に言った「入れてあげるんだけどみんなの列はそのまま」というのはこういうことだよ。


バケツリレーになじみがなければ、教室の机の列とプリントなどに読み替えてもらえれば良いと思います。
上記の説明では「横断的関心事」に関する部分が入っていません。次の段階で説明するのが良く、バケツリレーの比喩ではいささか不自然になると思ったためです。
友達(●)がみんなの列を並走していて、タイミングになったらバケツを受け取る感じです。(表現が…)

〇→〇→〇→〇→〇→〇→〇→〇→〇→〇
' ● ● ●
※友達(●)が登場するタイミングでバケツが渡ってると思ってください。
※友達は走って先回りしている体で。
※友達が同一人物(同じ処理)がポイント。別の人(別の処理)なら別の列を作り▲や■で表現

実際にプログラミングでアスペクト指向を使うとすれば、YatsurugiさんやLLmanさんの回答されている内容にふれることが必要だったり理解の助けになると思います。

最近はプログラミングの塾なんかもあるそうで。時代ですね。

投稿2016/09/10 23:10

編集2016/09/11 01:18
Hiroshi-Aoki

総合スコア804

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

earnest_gay

2016/09/12 01:27

具体例ありがとうございます!
guest

0

アスペクト指向を一言で説明すると
「元のソースコードに変更を加えずに新たな処理を追加すること」
そして
「誤った処理を減らし可読性のよいプログラムを作ることができる」
ということではないでしょうか?

詳細例も含めて
https://thinkit.co.jp/free/compare/15/5/1.html
のサイトも参考にされてはいかがでしょうか?

投稿2016/09/10 16:04

Yatsurugi

総合スコア1628

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

raccy

2016/09/10 21:20

質問には「比喩を用いて低学年が理解できるように」ってあるのですが、ちゃんと読んで、理解した上で回答していますか?それとも、この回答があなたにとって「比喩を用いて低学年が理解できるように」説明したものになるとお考えなのでしょうか?
guest

0

JavaにおけるAOP(アスペクト指向)について

「オブジェクト指向(OOP)」ではオブジェクト単位、
Javaならクラス単位でプログラムを作っていきます。

しかし、「横断的関心事」が各クラスに散在してしまうので、
その欠点を補うための仕組みが「アスペクト指向(AOP)」です。
クラスという分割の単位を超えて、統合する仕組みです。


たとえて言いますと、社会の組織での「縦割りの弊害」
といった問題と同じことが、プログラムでも起きてくるわけです。

たとえば、環境問題。環境汚染は国境を越えて広がりますよね。
海や空はつながっているから、大気汚染や海洋汚染に国境は関係ない。
だから、国際的に議会を開いて、一国を超えた対策をするわけです。

プログラムに戻ると、たとえば「ロギング」というのは、
各クラスごとに散らばりがちな機能です。
じゃあそれをAOPでまとめればいい、という考え方です。


ただ一方で現実的な話をすると、AOPはさほど普及していません。
「ロギング程度に、そんなご大層な仕組みの導入が必要なの?」
という別のコスト感覚があるのかもしれません。

投稿2016/09/10 16:13

LLman

総合スコア5592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

earnest_gay

2016/09/12 01:27

AOPはそんなに浸透していないんですね。。。 STSの利用はAOPが欠かせないと聞いていて、JAVA開発は今はほとんどTSTを使っているようなので、、、
guest

0

ベストアンサー

人間は下記のことができます。
・歩く
・走る
ただ、人間は生物です。呼吸をしないと死んでしまいます。
つまり、人間は下記のことができないといけません。
・歩く
・走る
・苦しくなったら呼吸をする

これについて違和感はありませんか?
あなたは普段、意識して呼吸をしているでしょうか。
「歩く」や「走る」は意識して行いますが、「呼吸する」は無意識に行います。
このように意識して行うことと無意識で行うことを分けることがAOPの第一歩になります。

投稿2016/09/11 17:11

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

earnest_gay

2016/09/12 01:29

言っていることは分かるのですが理解に至らず、、、 例えば、yonaさんの回答をプログラムの実例に置き換えるとどうなりますでしょうか?
yona

2016/09/12 01:50

仕様ですべてのメソッド実行時にメソッド名と時間を特定のファイルに書き込みむというものがあるとします。 すると、プロジェクト内の全メソッドの冒頭で特定の処理を行う必要があります。 メソッドの本来の役割の中に、メソッドの役割とは異なる処理を書かないといけなくなります。 この本質ではないがやらないといけないことを分離し、プログラマーに意識させずに処理に盛り込むことです。
earnest_gay

2016/09/12 07:29

ぼんやりわかってきました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問