49

ABAPについては、オブジェクト指向の側面があることを除けばわかりません。詳細を確認する前に、何らかのヘリコプタービューを確認したいと思います。私はそれを勉強するときにこれらすべてを見つけることができることを知っていますが、私が最初に言ったように、私は自分が何を扱っているのかを知りたいです。

  • それは(常に)コンパイルされていますか?
  • タイプステム:強くタイプされていますか?型推論を使用していますか?
  • 継承:単一/複数、インターフェースのような構造?
  • コレクション:配列以外のコレクションはありますか?ジェネリックコレクションですか?リスト内包表記を使用していますか?
  • 配列、returntypes、parametertypes、overrideingの(con / contra / in)分散はどうですか?
  • 例外的な処理はありますか?
  • 契約サポートによる組み込み設計はありますか?
  • 他のよく知られた言語に対抗するものとして注目に値するものはありますか?
  • ..。

基本的に特性に関する一般的な情報は大歓迎です!

4

2 に答える 2

79

それは(常に)コンパイルされていますか?

ABAPは一種のバイトコードに「コンパイル」され(歴史的な理由から「ロード」と呼ばれます)、カーネル内の仮想マシンによって実行されます。これをJavaと比較できますが、大きな違いが1つあります。負荷はマシンに依存しませんが、ターゲットのマシンタイプに合わせて最適化されます。これは、複数の異なるタイプのアプリケーションサーバーがあるシステムランドスケープでは、単一のプログラムに対して複数のコンパイル済みロードがある可能性があることを意味します。これが表示されることはありません。コンパイルプロセス全体が自動的に処理されます。

タイプステム:強くタイプされていますか?型推論を使用していますか?

ジェネリック型のシステムを上にして強く型付けされています。言語に統合された完全なデータディクショナリがあることに注意してください-非常に便利です。

継承:単一/複数のインターフェースのような構造?

単一継承。複合インターフェースや実装コンポーネントの名前変更などのインターフェースがサポートされています(2つのインターフェースIF_FOOとIF_BARの両方でメソッドBAZを定義でき、両方のインターフェースを実装するクラスには2つのメソッドIF_FOO〜BAZとIF_BAR〜BAZがあります)。

コレクション:配列以外のコレクションはありますか?ジェネリックコレクションですか?リスト内包表記を使用していますか?

他のプログラミング言語で「配列」として知られているものは、実際にはABAPには存在しません。通常、代わりにいわゆる「内部テーブル」を使用します。データベースのような構造化されたメモリ内テーブルを考えてください。さまざまなモジュールに分散するコレクションクラスのアイデアがいくつかありますが、これを行うための標準的な方法は、内部テーブルを使用することです。インスタンスへの参照またはそのような参照を含む構造を表す、いわゆるテーブルタイプの行を定義します。

配列、returntypes、parametertypes、overrideingの(con / contra / in)分散はどうですか?

アレイ:上記を参照してください。オーバーライド:インターフェイスメソッドを実装するとき、またはスーパークラスメソッドをオーバーライドするときに、メソッドシグネチャを変更することはできません。パラメータに関しては、データ(またはデータ参照)とオブジェクト参照のどちらを転送するかによって異なります。一般に、ダウンキャストを明示的に実行する必要がある場合、アップキャストは暗黙的に発生する可能性があります。

例外的な処理はありますか?

はい。複数の方法-これも歴史的な理由(下位互換性)のためです。クラスベースの例外がサポートされています。

契約サポートによる組み込み設計はありますか?

私が知っていることはありません。

他のよく知られた言語に対抗するものとして注目に値するものはありますか?

沢山の物。明らかに偏った概要については、http ://www.volker-wegert.de/en/node/17およびhttp://www.volker-wegert.de/en/node/21を確認することをお勧めします:-)

于 2010-01-26T09:24:44.777 に答える
24

彼らが言及したことをスキップしながら、私は前の返信が提供しなかったいくつかのことを提供しようとします:

それは(常に)コンパイルされていますか?
プログラマーのインターフェースには、コンパイルではなく「アクティブ化」と表示されますが、これはバージョン管理が組み込まれているためです。何かをアクティブ化すると、それがコンパイルされ、ソースバージョンとバイナリバージョンが「アクティブ」バージョンになります。誰かがコンパイルされていないソースを実行しようとすると、実行時に自動的にコンパイルされます。

タイプステム:強くタイプされていますか?
基本的にはそうです。ABAPは、PascalとCOBOLの間の奇妙なクロスのようなものです。ポインタのような「フィールドシンボル」があります。現在、汎用タイプもあります。(およびジェネリックフィールドポインタ)。最もクールな点の1つは、ABAPタイプとデータベースタイプの間に違いがないことです。作成したテーブルはすべて、自動的に構造型になります。つまり、ABAPは、他の言語とはほとんど異なる方法でデータベースと統合されています。他の言語のように単なる文字列ではなく、実際にはABAPの一部であるSQLを作成することもできます。

継承:単一/複数、インターフェースのような構造?
インターフェイス構造がありますが、私は通常それらを使用しません。ただし、再利用可能なクラスをたくさん作成した場合は、それらを使用することをお勧めします。

コレクション:配列以外のコレクションはありますか?ジェネリックコレクションですか?リスト内包表記を使用していますか?
さらに良いことに、基本的に動的配列の一種である「内部テーブル」があります。それらは、データディクショナリ内のものを含め、ほとんどすべてのタイプから宣言できます。それらは、ループ、ソートなどが可能です。ハッシュおよびソートされたバリアントを含む、いくつかのタイプがあります。

例外処理はありますか?
OOPタイプと非OOPタイプの両方。

他のよく知られた言語に対抗するものとして注目に値するものはありますか?
他のポスターが言ったように、たくさん。データベース操作、および複雑な構造とデータ型の再利用に関係することは非常に得意です。それは当然、クロスデータベースとクロスプラットフォーム(OS、およびプロセッサ)です。非常に優れたバージョン管理および転送システムを備えています。SAPシステム全体が非常に優れた多言語サポートを備えています。適切なタイトルと選択ボックスを備えたシンプルな画面を自動的に取得できます。つまり、プログラミングを減らして作業を増やすことができます。DBタイプと言語タイプなどの間でマッピングする必要はありません。
それが得意ではないこと:
1。数値は通常ASCIIとして保存されるため、多くのアプリケーションで数学の速度が遅くなります。
2.ほとんどのデータ構造は非常に正規化されています。つまり、データが50のテーブルに分散している場合があります。「スター」クエリは非常に一般的です。そのような場合、データを取得するための組み込み関数(fe論理データベース)が友だちです。
3. SAPはすべての人にすべてを提供しようとしたため、構成オプションなどが多数あり、関数が過去の動作に基づいて期待どおりに機能しない場合があります。
4.ABAPは非常に冗長な場合があります。GUI_DOWNLOADのような単純なもので「パターン」ボタンを使用してみてください。
5.SAPは、彼らが引き受けたものに非常に野心的であったため、ハードウェア、オペレーティングシステム、およびRDBMシステムの制限に早い段階で遭遇しました。したがって、彼らはそれを処理するためのレガシーな応急修理を持っていますが、それはきれいではありません。(ビリヤード台、クラスターテーブルなど)
6.プログラムを有効化すると、使用される汎用モジュールとの完全な互換性チェックは実行されません。何かが問題なくアクティブ化されるが、コンパイル時にキャッチされた可能性がある場合でも、実行時にクラッシュする状況があります。

于 2010-02-08T13:49:40.423 に答える