私は概念としてオブジェクト指向プログラミングを使用することの長所と短所を理解しています。私が探しているのは、進行中のOpenOを使っていることの長所と短所です。私が考慮する必要がある課題はありますか? ooとよく噛み合わない言語の部分はありますか?そのようなもの。進歩のためのオブジェクト指向プログラミングの長所と短所
編集:10.2b
私は概念としてオブジェクト指向プログラミングを使用することの長所と短所を理解しています。私が探しているのは、進行中のOpenOを使っていることの長所と短所です。私が考慮する必要がある課題はありますか? ooとよく噛み合わない言語の部分はありますか?そのようなもの。進歩のためのオブジェクト指向プログラミングの長所と短所
編集:10.2b
を使用して、私はあなたに私の意見を与えるでしょうが、私はそこに、おそらく最大の進捗嫌いだということあらかじめご了承ください。 ;)つまり、私はOOABLにいくつかの中規模のプロジェクトを書いているので、私はこの分野でいくつかの経験を持っています。これらは、あなたが、私は私の帽子のうちの話ではない知っているだけので、私が書いたいくつかのものです:クライアントとサーバのための
OOABL長所:
OOABL短所既存の手続きのコードベースをクリーンアップする
CATCH
/THROW
は、あなたのカスタム エラーを投げて、呼び出し元にそれらをキャッチさせません。下位互換性 はこれがさらに進化するのを防ぎます。SUBSCRIBE
は動作しませんでした。 メモリが使用されている場合。OOはすべて、大きな全体を作るために組み合わされた小さな再利用可能な部分を構築することに関するすべてです。 OOABLの大きな問題は、「ABL」の部分が、粗いデータ構造と列挙子がないため、本当に美しいものを構築できないということです。残念ながら、それは閉鎖された言語であるため、処理された手を回避したり、独自の新しいデータを作成したり、外部の構造を制御したりすることはできません。
ここでは理論的にはですが、MEMPTR、固定配列(EXTENT)、多分WORK-TABLEを使ってこれらのことを試してみてください。しかし、私はこれを10.1Cで試みましたが、インターフェイスの継承と抽象クラスがないためにデザインが分断されました。予想通り、パフォーマンスはかなり悪いものでした。後者の部分は私の貧弱な能力に起因するかもしれませんが、それは克服することは不可能であるという実装上の制限だと思われます。
OpenEdgeで絶対にコーディングする必要がある場合は、最終的にはOOABLを使用してください。手順上のABLよりも優れており、OpenEdgeの反復リリースごとに粗いエッジが少しスムーズになります。しかし、それは決して美しい言語(OOまたはそれ以外)ではありません。
オブジェクト指向のプログラミングを習得し、ABLに限定されていない場合は、オブジェクトをRubyやSmalltalkなどの第一級の市民として扱う言語を検討することを強くおすすめします。
ありがとう、これは本当に助けになりました! – Bill
あなたは私が行うよりも多くのopengesを憎むことができませんでした! IMHO進歩はABLを落として、キラーSQLと無SQL実装に取り組むべきです、誰もABLを望んでいません –
少なくとも最悪の部分は、マップ/キュー/デッキ/リストの実装を可能にするファーストクラスの配列の欠如です。 –
K +
ひとつだけ - 「エラー処理が吸う」 - それは吸うではなく、あなた自身のエラー・クラスを作ることができないので、呼び出し側のブロックでキャッチして - 私はそれを使用しています、動作します。古いNO-ERROR/ERROR-HANDLEオプションとProgress.Lang.Error/CATCHブロックとROUTINE-LEVEL ON ERROR UNDO、THROWからの混乱は何ですか。それは大きな問題です。チームには何の慣習もなく、エラーハンドリングと使い方があります。
右。私はそれを簡潔にしようとしていましたが、私が意味していたことは、Java(本質的にOOABLがその能力の最大限にコピーするもの)であり、私は、 'THROW'が何らかのエラーを起こすメソッドを定義し、 、私は投げている可能性のあるエラーを 'CATCH'しなければなりません(あるいは呼び出しスタックをもう一度呼び出す)。 ABLでは、これのコンパイル時の強制はありません。 OOABLでのカスタムエラークラスの作成は、基本的にカスタムエラー番号とメッセージを提供します。 Javaのような素晴らしい制御フローを得ることはできません。「ROUTINE-LEVEL ON ERROR UNDO、THROW」でも。 –
また、より簡単に言えば、呼び出し側はあなたのメソッドがカスタム例外(例えば 'FileNotFoundException')をスローしたことを決して知らないかもしれません。カスタム例外をスローするメソッドを呼び出すときにコンパイラメッセージはまったくありません。彼らはあなたのソースを見て、あなたのメソッドがエラーを投げることを確認する必要があります。 Javaでは、たとえあなたが無視することを計画していたとしても、コンパイラは強制的にキャッチしたり再スローします。 –
@AbeVoelkerあなたが言及しているのは "checked exceptions"という名前で知られていて、様々な "Java pet peeves"リストのトップアイテムの1つとして偶然に配置されています。恐らく、例外をチェックした方が良いよりも害が多い理由の1つは、悪名高いAnders Hejlsberg氏が提示したものです:http://www.artima.com/intv/handcuffs.htmlそれ以外は、ABLに関するあなたの批判的分析に完全に同意します。あなたの他の投稿の多くはあなたのブログにあります。私はあなたを彼のツールセットを気にする専門家ではなく、 "嫌い者"とは思わないでしょう。 –
私は過去4年間、OOABL(10.1cで始まった)で80%の時間をかけました。 OOABLの使用をお勧めしますが、OOABLを他のOO言語と同じ方法で使用すると問題が生じることを考えることは非常に重要だと思います。 「同じように」とは、世界で共通するデザインパターンと実装方法を意味します。また、いくつかのタイプのアプリケーション、特にテクニカルフレームワークの分野では、OpenEdge(ORMなど)との連携が困難です。
原因は、OOABLのパフォーマンス上の問題と、言語のOO機能が欠落しています。
例としてC#またはJavaでプログラミングする場合、多くの場合、オブジェクトのメモリフットプリントとインスタンス化時間は大きな問題にはなりません。 ABLを使用すると、これはずっと頻繁に大きな問題になります。 これにより、他の設計上の決定が導かれ、いくつかのパターンとフレームワークの実装が妨げられます。
一部欠落または不正なオブジェクト指向の機能:
他の言語でのプログラミングに精通していて、OOABLの使用を開始すると、そこにあると思われる多くのものを失っているポイントに達することができます。 ABLのもの
アプリケーションをWindows上でのみ実行する必要がある場合は、C#で新しいooコードを実装し、clr bridge経由で既存のプログレスコードから呼び出すこともできます。
+1。だから私はもはやそれに触れる必要はありません喜んで。私がした場合、私はどちらかを使用します。NET、SQLアダプタを使用してデータベースにヒットする他の言語、またはCコードを記述し、ABLをラッパーとしてのみ書く:-) –
どのバージョンのProgress/OpenEdgeを使用していますか? –
using 10.2b .... – Bill
OOPを使用する場合は、class.Proxy GeneratorでProxyGenを使用して.NETプロキシを生成しようとすると、CLSを入力できなくなり、ゲートウェイプロシージャを作成して公開する必要があります。 [KB Article](http://knowledgebase.progress.com/articles/Article/P181115?q=Can+you+instantiate+a+4GL+class+instance+from+a+.NET+client%3F&l=en_US&fs=Search&pn = 1) – kiran