※当サイトの記事には、広告・プロモーションが含まれます。

PythonでAOP(Aspect Oriented Programming)を導入することは無い感じなのか

nazology.net

地球の磁場も生命を守る盾の役割を果たしています。地球には強い磁場があるために、生物にとって有害な太陽風が地表まで届きません。太陽風は高温のプラズマ(原子核と電子が分離したもの)です。これは生物にとっては危険な存在ですが、地球の磁場が防いでくれています。

現状宇宙で唯一の生命の惑星『地球』ー惑星としての特殊性を解説! - ナゾロジー

なぜ、地球に強い磁場が存在するのかは長い間よくわかっていませんでした。地球の中心部は5000℃を超える超高温です。強磁性鉱物でも数百℃以上の高温では磁性を失うことを考えると、地球内部の鉱物が永久磁石になっているとは考えられません。

現状宇宙で唯一の生命の惑星『地球』ー惑星としての特殊性を解説! - ナゾロジー

しかし、磁石には永久磁石の他に電磁石というものがあります。電流が流れることによって磁力が発生する磁石が電磁石です。

現状宇宙で唯一の生命の惑星『地球』ー惑星としての特殊性を解説! - ナゾロジー

そのため地磁気は、地球内部にある鉱物の磁石が原因ではなく、地球内部で発生している電流が原因と考えられています。地球の外核は高温の液体であり、主に鉄で構成されているので電気をよく通します。これが地球の自転に伴って対流し、鉄の運動によって生じた電流が地磁気を形成します。このように地球内部の流体運動が磁場を生み出しているという仮説をダイナモ理論といいます。

現状宇宙で唯一の生命の惑星『地球』ー惑星としての特殊性を解説! - ナゾロジー

⇧ 地球の生命を守っている磁場って、地球の寿命ぐらいまでは機能し続けてくれるものなんですかね?

どちらにしろ、「太陽」にしろ「地球」にしろ寿命があるわけで、宇宙空間で永続的に生活していける技術の研究が重要ということですかね。

問題は、様々な機器を稼働させるためのエネルギーをどう維持するかってところですかね。

まぁ、少なくとも、今を生きている人類には影響のない話ではありますが...

AOPAspect Oriented Programming)とは

Wikipediaによりますと、

アスペクト指向プログラミングAspect Oriented Programming、AOP)は、横断的関心英語版を実装する手法によって、プログラムのモジュール性を高めることを目的にしたプログラミングパラダイムである。

アスペクト指向プログラミング - Wikipedia

横断的関心とは、関心の分離によるモジュールの複数以上にまたがっている共通機能を意味している

アスペクト指向プログラミング - Wikipedia

AOPはこの横断的関心を、既存コードに設けた間接点(joint point)を通しての振る舞い助言(advice)の追加によって、コード変更を伴なわずに実装できるようにしている。

アスペクト指向プログラミング - Wikipedia

任意の間接点および振る舞い助言の定義をまとめたモジュールがアスペクト英語版と呼ばれ、これが横断的関心の表現体になる。

アスペクト指向プログラミング - Wikipedia

例としては、全ての関数呼出しにログ出力を伴わせたい時に、全関数冒頭にjoint pointを設けてログ出力コードをadviceにしたアスペクトをプログラム内に定義することで、自動的に各関数呼出しとログ出力が同時実行されるようになる。

アスペクト指向プログラミング - Wikipedia

⇧ とのこと。

イメージとしては、

www.researchgate.net

⇧ 上図が分かりやすいかと。

つまり、同じ様な処理を切り出して、処理が呼ばれる条件等を決めておいて呼び出されるようにしておく感じになるのが、「AOPAspect Oriented Programming)」ということかと。

大規模システムとかであれば、かなり役立ちそうな機能ではありますと。

ちなみに、

しかし現状のアスペクト指向は、オブジェクト指向のコードをサポートする役割に留まっていることが多く、独立したパラダイムとして扱われることは稀である。OOP言語JavaAOPを追加した「AspectJ」がその代表例である。純粋OOP言語RubyAOP由来の機能を補完的に取り入れている

アスペクト指向プログラミング - Wikipedia

Pythonでは、そもそも、「AOPAspect Oriented Programming)」の利用を想定していなさそうな感じっぽい...

少なくとも、Wikipediaの説明では、「主なアスペクト指向言語」でPython向けのものは存在していない模様。

PythonAOPAspect Oriented Programming)のライブラリにどんなものがあるのか

ネットの情報を漁って見た感じでは、

ninoseki.hatenadiary.org

⇧ ライブラリは存在するようですと。

ただ、

python-aspectlib.readthedocs.io

github.com

⇧ 開発の状況が、なかなかに不定期なこともあり、利用して良いものか悩みどころですと。

Python標準のdecoratorとAOPAspect Oriented Programming)

Pythonの標準の機能として、

docs.python.org

decorator

(デコレータ) 別の関数を返す関数で、通常、 @wrapper 構文で関数変換として適用されます。デコレータの一般的な利用例は、 classmethod() と staticmethod() です。

https://docs.python.org/ja/3/glossary.html#term-decorator

⇧「decorator」というものが用意されていらしいのですが、

一応、

qiita.com

kazuhira-r.hatenablog.com

Pythonの「decorator」なる機能で「AOPAspect Oriented Programming)」っぽいことができるようですと。

PythonAOPAspect Oriented Programming)を導入することは無い感じなのか

ネットの情報を漁ってみた感じでは、

qiita.com

Pythonのデコレータってめちゃくちゃ難しいなーって思ってたけど、結局表題に帰結する。
「引数で関数を受け取って、関数を返す」とか難しいことを言っている記事が多かったけど、結局、その対象のメソッドを実行する前後に何をしたいかどうかだけ。

PythonのデコレータはSpringでいうAOPと同じ概念 #Python - Qiita

⇧ と仰ってる方がおられますと。

ただ、「Spring Framework」の公式のドキュメントの「AOPの概念」のページを見た感じでは、

spring.pleiades.io

⇧「Spring Framework」で取り入れられている「AOPAspect Oriented Programming)」の機能は盛り沢山な印象。

公式の情報では無いのですが、

blog.devgenius.io

⇧ 上記サイト様によりますと、

  • プロキシなしAOP
  • プロキシありAOP
    • JDK dynamic proxy
    • CGLIB proxy

の3つがあるっぽい。

Pythonで似たようなことを実現しようとすると、

kazuhira-r.hatenablog.com

⇧ いろいろと自分で作り込まないといけなくなりそうな気配。

ちなみに、

qiita.com

AOP(ライブラリによるProxy生成型)が不要だと考える理由を書いてみます。

AOPが不要だと考える理由 #設計 - Qiita

⇧ そもそも、Proxy形式の「AOPAspect Oriented Programming)」の導入するメリットが無いというお話もありますと。

とりあえず、ヒットする情報が少ないところを見ると、Pythonで「AOPAspect Oriented Programming)」を導入することは無い感じなんですかね?

Pythonの「decorator」なる機能で、対応できそうな部分ぐらいは取り入れるべきなのか、どうしたもんか...

毎度モヤモヤ感が半端ない…

今回はこのへんで。