web-dev-qa-db-ja.com

システムプログラミングとオブジェクト指向設計-注意すべき点

次の学期(5週間弱で始まります)、私はシステムプログラミングとOODを同時に取っています。どうやらSPはLinux上のCでの作業に集中していて、私はJavaとPythonの経験しかないので、私はこれについては少し緊張しています。

大学でこれらを服用したことがある方のために、私は何に注意する必要がありますか?

アセンブリの概要を含むコンピュータ組織については、すでに取り上げました。アセンブリでループを実装することを除いて、アセンブリプロジェクトではB +からA-の範囲でした。しかし、回路の構築は別の話でした。

4
Jason

まあ、正確に何が必要になるかはクラスによって異なりますが、いくつかの一般性はおそらく当てはまります。 Javaプログラマー向けのCブックを入手することをお勧めします。主な落とし穴を指摘し、移行に役立つ可能性があります。

Cで心配する最大の項目で、Javaはポインタとメモリ管理です。Java参照は技術的にはポインターですが、それらは真剣に唖然としたポインターであり、私が見たところ、Javaプログラマーは実際にはそれらをポインターとは見なしておらず、処理に問題があることがよくあります。ポインタを最初に使用します。これと連携すると、ガベージコレクタがないため、ヒープに割り当てられるものはすべて手動で割り当てるだけでなく、手動で割り当てを解除する必要があります。終わったら、mallocfreeに精通する必要があります。クラスもありません。Cの構造体はできます。それらには関数が含まれているため、通常、オブジェクト指向の方法でCでプログラミングすることはありません。それは、大したことではないかもしれませんが、システムで学習することを意味します。プログラミングコースとあなたのoオブジェクト指向設計コースは非常に異なる可能性があります。

OODは、あなたが知っていることの拡張であり、オブジェクト指向の方法でより良いプログラミングを行う方法を教えてくれるはずです。一方、システムプログラミングは、降りて汚れることがはるかに重要であり、それが扱うものでははるかに低レベルになります。しかし、どちらも優れたプログラマーになるために非常に重要です。

あなたの正確なスキルセットと経験を知らず、正確なコースを知らなければ、より詳細なアドバイスを与えることは難しいでしょうが、主に、問題は、Cがあなたのために物事を管理せず、どのように管理しないかを扱うことにある可能性があります。自分から身を守るように努めてください。 JavaまたはPythonよりもCでのプログラミングには注意が必要です。他の多くの言語では違法であり、驚かされる可能性のある、完全に合法的なCであるものがたくさんあります。メインただし、気になるのはポインタと手動のメモリ管理です。

4

恐れることはありません-それはコードだけです

JavaとCの構文は、同じ言語族に由来する非常によく似ています。他の人が言っているように、あなたの最大のハードルは、ポインタの学習(ヒント: それらはただの間接参照です )とメモリ管理です。突然、Javaで宣言していたすべての配列を破棄する必要があります。他の主題と同様に、それが何であるかを小刻みに動かすと、それは突然簡単になります。

全体として、言語の構文や構成ではなく、作業する環境を学習することが重要です。 Linuxプログラミングは、一般的なJavaプログラミングとは大きく異なります。 1つはオペレーティングシステムのAPI、すべてのCポインターと構造体に密接に依存しており、もう1つは抽象化のレベルが高く、さらに多くの機能があるため、一般的にはるかに単純です。

考え方の発達

おそらく、これに取り組む方法は、仮想マシンとして2つの作業環境を維持することです(ParallelsまたはVMWareが思い浮かびます)。 1つは純粋にCコードの開発用で、もう1つはJava用であり、それらを混同することはありません。デスクトップにさまざまなテーマを使用して、さまざまな考え方を強化できます(Cの場合は黒、Javaの場合は青など)。 1つまたは他の環境で仕事をするたびに、仕事を遂行するために必要な適切な考え方を促進するための多くの視覚的な手がかりがあります。

2
Gary Rowe

同じ学期に反対のポイントで授業を受けるのはいつも難しいと思っていました。

システムクラスが非常に低レベルの場合は、OO以外のことを行う必要があります。

それぞれのアプローチの利点を学ぶ良い機会かもしれませんが、2つをまっすぐに保つことができれば。

OODクラスに関する私の個人的な経験では、完全なクレジットを取得するには、ほぼ理論的なレベルの抽象化に進む必要があり、1学期にOS機能の多くを構築することは合理的ではなかったため、システムクラスは通常コードよりも理論的でした。 。

0
Bill

Cまたはアセンブラーを実行したことがない場合は、まったく新しいレベルでJavaおよびPythonを理解する準備をしてください。記憶と参照がどのように機能するかを教えてくれた科学調査クラスでは、ほぼ確実にそれを完全に理解していません。

心を開いて、心を開いてそれに入る。 Cは美しいものですが、Pythonが美しいとはまったく同じではありません。トレンチナイフが美しいのと同じように、より美しいです。

0
Jeremy

システムの場合、低くする必要があります。基本的なもののポインタ、メモリ管理、レジスタ、システムコール、さらにはアセンブリやシステムアーキテクチャなどがどのように機能するかを理解する必要があります。 OOPSはより高いレベルの抽象化です。そのため、視点または抽象化のフレームを継続的に切り替える必要があります。これを心に留めておけば、それほど難しいことではないと思います。

0
Gaurav