retireSakiの日記

たぶん引退した?ソフトウエアエンジニアのブログ

オブジェクト指向言語って怖い!?だから結局どうすればいいのさ!

 オブジェクト指向言語オブジェクト指向プログラミング言語)といえば、
規格的に知っている限りでは、
古くは、C++ から Objective-C , Eiffel , Self , CLOS , Modula-3 , Python , Sather , NewtonScript , Ruby , Perl , Ada , Java , JavaScript , OCaml , PHP , C# , Visual Basic.NET , COBOL(2002) , Ceylon , Swift などがあります。

f:id:retireSaki:20181030013324p:plain

 この中で、聞いたことがある、使ったことがある言語はいくつありますか?仕事としてなら、5つ以上あれば潰しが効く高レベルなプロと言えるでしょう。

 

オブジェクト指向言語は安全に動作するのか?

 近年のオブジェクト指向言語は、「作成した使われなくったオブジェクトを自動的に開放し、メモリーリークやスタックオーバーフローなどが発生しにくくなっている」と謳い文句を使っていることが多く、それを信じ込んでいるプログラマーが多いのも事実です。特にメーカーが開発したプログラミング言語では、この謳い文句を全面に出している傾向があります。

 しかし、これはホントであり、ウソでもあります。

近年コンピュータやOSの加速度的な性能向上などにより、このようなエラーが起こりにくくあり、昔に比べれば、かなり少なくなっています。しかし、ちょっとネットで調べてみていると判りますが、メモリーリークやスタックオーバーフローなどが原因でエラーやハングアップなどが起こるという事象が後を経ちません。

 それはなぜでしょう?!



◆ まだ完璧な言語は存在していない

 近年流行りのPythonを見てみたいと思います。
 Pythonは、処理中に使われなくなったオブジェクトを検出し、自動的に開放するようになっています。
 他のオブジェクトから全く参照されず、Pythonからアクセスできなくなってしまっているオブジェクトは、不要なオブジェクトとして削除されます。
オブジェクトは、それぞれお互いへの参照をメンバとして持っていますが、複数のオブジェクトがループ状にお互いを参照する循環参照のすべてが開放されるようになっているわけではありません。
循環参照に含まれるオブジェクトがPythonのクラスから作成したインスタンスだけであれば開放されますが、C言語で実装された型のオブジェクトが含まれる場合、開放されないケースもあるのです。
 また、プログラムが複雑化すればするほど、すべてのオブジェクトの開放処理が確実に行われるわけでもないし、呼び出されるタイミングは予測できないし、全く呼び出されないかもしれないのです。C++のデストラクタのような確実に開放する保証はないのです。


 これは、Pythonに限らず、他のオブジェクト指向言語で、同じC++でもQtなども同じです。



◆ 見げ道として

 可能な限り、その言語以外のライブラリーを使わないというのも1つの安全策ですが、それでは作成するべきアプリなどの機能を実現できないケースも多々あり、現実的方法であると同時に非現実的です。
特に規模のアプリやシステムでは、その傾向が強くでてきます。


 そこで、アプリなどを適応した言語で細分化し、シェルなどを使って連結動作させることで安定化させます。
汎用機などで行っている手法に似てます。ソフトウエア業界内でよく言われる「ぐるっと回って、一昔前に戻る」という現象ですね。



◆ 結果的に複数の言語スキルが必要

 比較的簡単なアプリをユーザーに提供するなら、1つの言語だけも安定化させることはできるでしょう。しかし、これまでに述べたように、比較的規模のアプリやシステムを扱うエンジニアとしては、1つの言語だけでは不十分であると言えます。
 特に企業となると、採用条件にあたかも1つの言語を指定しているケースもありますが、入社後しばらくすると必ず他の言語も習得させられます。場合によっては他の言語習得時の教育もありませんし、自己責任として習得する必要があります。


 あまりにもオブジェクト指向言語だけに頼っていると痛い目をみることもあります。いろんな種類の言語にも触れ、その言語の特色・特性などを把握しておくと良いでしょう。

 

 なかなか読むタイミングない 、こんな本を読んでおくと良いかも。

オブジェクト指向でなぜつくるのか 第2版

オブジェクト指向でなぜつくるのか 第2版

 
オブジェクト指向のこころ (SOFTWARE PATTERNS SERIES)

オブジェクト指向のこころ (SOFTWARE PATTERNS SERIES)

 
注目記事

「Amazon.co.jpアソシエイト」または「[乙の名称を挿入]は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイトプログラムである、Amazonアソシエイト・プログラムの参加者です。