OOP(ターン)

OOPアプリケーションソフトウェア開発における[思考論文]http://rcatv.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&_c=BlogPart&partqs=cat%3d%25e7%25bc%2596%25e7%25a8%258b

[ 場合Zhuanzhaiソースを指定してください!]

TAG:.NETは

、私たちは彼がOOPを見て学者の高さに自分自身を高めるために、プログラマであることを忘れてみましょう、あなたがソフトウェア開発の信じられないほどの助けを持っているどのような役割OOPを見ること私を信じてください。
OOPは、方法論のモデリング、禅仏教と本質的にはその変わらないが、現実世界の多くの一般的な問題の解決策を見つけるためにあるという考えです。これらの問題のための共通の問題は、我々は非常に抽象的方法への解決策を模索する必要性に上昇しなければなりません。多くを見つけると方法論やイデオロギーを洗練するための努力の年の哲学者の千。これらの方法論やアイデア次々は、このように社会経済的および文化的進歩と人間の思考に貢献し、すべての人生の歩みに適用されます。

ソフトウェア業界や他の産業の発展、特にコンピュータのハードウェアの製造業はこれまで、他の産業の兄弟に比べて後ろにあります。なぜか?ソフトウェア業界に加えて、後半の新興産業の外に、業界幹部は、方法論の私たちのフィールド内でずっと後に他の産業が同時に発生しないよりを導入していますされ始めました。勤勉と天才の幸いなことに、ソフトウェア業界の決して不足、ほんの数十年、私たちは、抄紙機の一部の人々の同じ時間何千ものアプリケーションで、オペレーティングシステム・ソフトウェア開発サービスをマルチタスク現在のウィンドウに0101から書くことができますこのプログラムは、「ソフトウェアの専門家の信用に加えて、本発明、古代の哲学者や活動家もここに、私たちに大きな貢献をしてきたからメソッドを作成するために懸命に仕事を続け、デザインパターンの13種類にそれらを精緻化4つの「トリビュートのギャング。

ここでは、私たちのテーマのテキストを入力するか、XMLOLの考え方は今イデオロギーの問題を試してみました!
「それが何であるかOOP?」この質問は、私たちがどのようなOOPで非常によく説明することができ尋ねました!
オブジェクト指向プログラミングは、中国が「設計オブジェクト指向プログラミング」と解釈されるべきであり、それは退屈を説明するために書かれたということです:OOPは英語完全な名前の略です。
あなたは退屈に感じたり、そのような概念を導入するために慣れていると感じていなければなりません。私たちは少し異なっている必要がありXMLOLで(多くの場合、我々は違うん)。

XMLOLは、原点の概念から、この概念の性質を調べるために使用しました。OO思考はOOP(思考を向いているオブジェクトカテゴリ)のカテゴリに属する、とOOはそれが何であるかを考えて?
これは上に行くように頼まれている場合、それは常に問題となります。

洗練された文でオブジェクト指向の考え方のエッセンスを抽出してみましょう:共通のプロパティで、精錬、精製、抽象抽象クラスを分析することによって、問題のある領域から、現実の世界に慣れている人間の心からのアイデアを検討してください。「思考と現実の世界から人間の心の習慣の問題を考える。」この文は、オブジェクト指向の考え方の本質です。
この定義に加えて、OOAに適用され、OOD、OOPもアイデアに適用されます。両者の違いは、前者OOPは、ソフトウェア開発プロジェクトの具体的な応用分野を達成して来てこの考え方を利用していることです。

OOP 4つの特性:抽象的な、カプセル化、継承多型の

抽象(抽象):物事の最も一般的な属性のうち、個人を抽出する方法が抽象化と呼ばれる分野での行動に問題があります。
パッケージ(封入):定義オブジェクトと操作のみ抽象インタフェース、およびそれらの実装を隠します。
継承(継承):相続による財産の種類の既存の、元のデータ型に影響を与えることなく、新しいデータ型を作成します。
多型(多型):プログラムは、それらの共通の特性の観点から記述することができるように、データ型のセットの様々なタイプとの間の差を決定します。

(注:実際にOOPのアイデアを理解していれば、逆転されることはありません特性の4種類のオーダー)

、我々は最初の問題領域は、同じ性質を持っている、オブジェクトの振る舞い抽象的に考えOOPで、ここではこのクラスのオブジェクトは、抽象クラス(ここで話し中で抽象クラスJAVAやC#抽象クラスと等価ではないことに注意してください)と呼ばれる
パッケージ「のみ達成するために、我々はオブジェクト指向するプログラミングプロセスを」私たちはいつもの話を、 「」継承『と』多型は、 『のみ意味になります!』
「なぜなぜパッケージの継承を実現し、多型が、私に私が!?納得ます真実伝えるために意味のあることだろう?」:まあ、この時間はあなたが聞いて頑固になる
あなたはスピードを育つようになる、そのような信念を持っています。
私たちは、なぜ明確な面で人気のチャットのような明確なステートメントを使用してみましょう。

あなたが何かを購入するために支払わなければならないものを尋ねる、私はあなたに質問をするとき、私たちは現実の世界に戻ってみましょうか?なぜあなたはチケットを買うためにキューに入れなければならないのですか?私はあなたがお答えします知っているので、あまりにも驚いてはいけない:「私たちはものを購入するために支払うことになっている、我々はあなたが警官があなたを逮捕します払っていない場合は、警告されます空港のセキュリティをラインアップしていない、ああ、チケットを買うために並ぶ必要があります。」 !あなたはあなたが違反した場合、従わなければならないあなたは現実の世界で多くのルールがある理解と思いますか、どこでも、規制が存在すると何の規制が存在しない場合、我々は、労働者保護の果物を生産するために懸命に働く人々を保護することができ、処罰されます戦いを殺すために殺到し、誰もが、すべての他の誰かを待っているの生産作業、および進歩と発展について話をしたいと考えていません。
同じことは、ソフトウェア業界では、我々は外部の呼び出しを行うための唯一のインターフェース、規則に従ってそのプロパティまたはメソッドを保護するためにいくつかの種類の様々な機能を、仕様のセットを指定本当です。外国人が実装された機能の複雑さを簡素化しながら、それは自分自身を擁護しました。そのようなルールが存在しない場合は、「パッケージ」を制限し、その後の継承は非常に面倒になり、ちょうどクラスのように、単にクラス属性とメソッドの他のメンバーを取得するために呼び出すことができます、私は他の誰かを取得し、なぜ遵法のトラブルに行くことができますすべてがそれで誰か他の人のクラスを継承し、それは私に多くの問題をもたらしました。

今、あなただけの「パッケージ」、「継承」とだけまだ有意義になり「多型」を達成することを理解していますか?あなたがそう言うなら、私は非常に誇りに感じます:)

私たちは少しリラックスして、武道の小説「正」の道と人道的な説明「継承」とは「悪」の道を再び道をヒット「多型。」
(注:ここで私は読者が継承やポリモーフィズム詳細な定義とその使用およびルールの一般的な理解に関する書籍の数から学んだことを想定)

C#とJavaでの継承ルールは、このアナロジーは、親クラスのメンバーとメソッドがより合理的になるだろう持っており、親クラスのサブクラスは非常にタイトで、サブクラスのようにすべての派生クラスは、親クラスのすべてのメンバーとメソッドを継承していますそう頻繁に[JAVAやC#で唯一の単一継承]単段のチェーンを形成することになる家族を継承するために行く、親クラスが継承されたメンバー(ゼロが初期化または親クラスの仮想メソッド、抽象メソッドのオーバーライド)の責任である必要があります継承。

このような記述では、金庸の祖父の武道の世界を紹介し、「継承」しています。
「武」と「少林寺」2つの宗派は、騎士道武道の第一世代から、有名な川や湖のように、川や湖が二武道はこの世代の武道で、存在価値と意味を持っていると考えられているかのように「継承」古い時代の交換は、世代が徐々に時代遅れに落ちたので、彼は後継者を探していると彼の後継者に渡される生活の中ですべてのスキルと真実のアイデアを入れ始めました。
II世代は、すべての努力を取得し、栽培は、紛争、年齢の交換太陽と月のサイクルを解決するために川や湖や川や湖で、この武道の教えを引き続き推進するための新たな取り組みを作成した、単一武術は、目に戻っ世代、N世代のヘッドから世代へと受け継が彼の前任者の長老たちを見て、彼らが受け継がれている多くの場所を感じるし、あまりにもナイーブマスターカンフーのパフォーマンスに物事を行うが、彼はそれを尊重し、ヤシの前任者の教義を強制します。これは「正しい方法」-----正しい方法です。

説明する技術的な用語では「多型を、」用語の単語は次のとおりです。同じセマンティクス、異なる行動!私はあなたが多くの多型の概念を理解して確信しているが、実際にそれの「多状態」という概念を理解できますか?見る人のいわゆる目は賢明な知恵を参照してください。ソフトウェアの分野では、特に高レベルの言語で、達成マルチ状態性能がたくさんあります。実現の「継承」、「多型」ので、より有意義になることがあり、我々はポリモーフィズムを実現するためのインタフェース、仮想メソッド、抽象クラス、および他を使用することができます。何度も我々は他のクラスから継承するいくつかのクラスを定義しますが、私たちは同じ動詞の使用またはクラスの多くでは名詞ことを発見した回数。この場合、私たちは繰り返し動詞という用語を使用したり、名前やメソッド名を属性している、それは同じ名前を持つ私たちのプログラムの中で考えられるメソッドとプロパティの中で私たちは一つの方法を探しているが、中に混同されるだろう、どこでも何回も存在しますこれはこれです。これは、私たちは私たちがフィッタように見える繰り返しを、嫌いフォーカスの焦点では​​ありません。
この場合、私はあなたが発生し、このような繰り返しを避けるために、多型のものを使用することをお勧めします。

もう一度、私たちは「多状態」についての話を金庸の祖父の武道の世界に戻る

規律悪いカルト組織の完全な欠如として「多状態」、それは一緒に必要があるため、彼らは突然、理由を考えたグループは、(あります、私を戦う)この言葉が適切である「突然、思った」、しないでください
カルトのリーダーは、実際には名前だけに存在している権威あると思われる、唯一の理由は、この位置の指導者たちの存在の彼の存在の意味、彼はただ話をする何もしない、でも彼と言ってまた、次の人がそうすることを正直リーダーになることを、彼の言葉に実行するために実行したりしないようになりますコントロールしています本当に悲しいです。そして、ここで表面のみを受け入れ、指導者のこの集会の存在、ダウン伝えるコマンドのリーダーを確認するために、その後、彼らのニーズに応じて実行するように加えました。1日のリーダーが出て話した:「グラブ」(どのようにシンプルなああ)私たちは分析している必要があります。次のコマンドを聞いた後、つかむために飛び出す、Aクリスチャンは、彼が着ている服を盗もうとし、今の服の一部を欠落している感じ、Bカトリック教徒は彼のガールフレンドにリングを計画している、彼の必然的な目標は、リングをつかむことであり、Cキリスト教徒を命じられた後、貧しい貧しい人々を与えた彼自身を食べに適切ではない気がします。、B、Cの3つは、実行リーダーのコマンドですが、同じではない、でもキリスト教徒党首はちょうどあなたが何を気にしない彼の話を無視している間に限り、人々は次のように耳を傾けるように、Cに反しています買い物やライン上のコマンドに行き、彼のものではありません。
これが私たちの「多状態」に戻って来る---恐ろしい恐ろしいカルトである- (ここで私は「多型」誹謗中傷していない場合があること 役割と存在意義。

) 我々は正式に導入心配しないで、そんなにはまだソフトウェア開発におけるOOPの実用化の公式言及されていないの話

私たちは、JavaやC#にプロセス指向開発言語の推移から多くの人々があることを信じるように私を、私たちは過去にCを使いますASP、PHPは、私たちはいつも非常に不快に感じるC#やJAVAでプログラムを書くために始めて、私たちのロジックを記述するために、私たちは本当に理解することはできません、C簡潔かつ表現力豊かなスタイルのように、豊富なCのシンプルさと効率性を欠場しますシンプルな機能を実現するだけでなく、クラスの多くを書き、クラスが別のクラスなので、長いコードを呼び出します。

時間過去2ヶ月で、我々は、C#に直面しているか、JAVAは、そのいくつかの洞察いるので、このような長い時間を費やしたが、また、意識的にプログラムを書くことがOOPスタイルを使用し始めた、しかし、まだ多くの場合、クラスを抽出する方法を知っていないと感じ特定の問題の顔は、誤って、オリジナルのアイデアに戻ります、起動する方法がわからない、心の多くを見つけるでしょう。繰り返し学習多数の後、私たちはまだ、それは本当に非常に厄介な問題である。このような問題の多くにそれを洗練することはできません。

[以下の実施例および主な内容は、もともとこの声明の中で---「JAVAフォーラム」から派生した]

スパムを送信するために、たとえば、スパムリストは、データベース内に存在します。Cで書かれている場合、それはマシンを送信するためにqmailのsendmailコマンドを呼び出すと、電子メールアドレスを取るために循環、この思考のようなものになり、最初のメッセージの内容を読み、[データベースに接続します。

:そして、それはOOPであるため、あなたがメインのコースが内側に詰めてどのようなコードすることはできませんので、彼は四つのカテゴリー考案し、達成するためにC#を使用して検討し

、クラスには、電子メールアドレスを取るための責任がある
クラスは、メッセージの内容を読み取るための責任があり、HTML形式にエンコードされたMIMEを、一緒にメッセージヘッダと、
良好なクラスが指定された電子メールアドレスに符号化されたメッセージを送信する責任がある
クラスを呼び出すために電子メールを送信し、処理コマンドライン引数メインクラスは、コマンドからパラメータを読み取るための責任があります。

各処理モジュールの機能に係る作業は、タスクモジュールを完了するために4つ、各クラスのための1つに分割されています。
メインクラスに加えて、他のクラスは、異なる代替の実装は、データベースクラスによってアドレスリストをフェッチ、同じインタフェースを実装し、テキストベースのアドレスリストをフェッチ、メインクラスは、それを必要達成するために適切な選択として、使用することができる持っています。(概要:あなたは上記の設計が実装されているキーを押すと、高い凝集のない実装クラスが存在しない、全ての低いカップリングまず、それは「人」カテゴリの説明では、単に例えば、問題を解決する方法を記述するために実装される機能からのシングルです。したがって、上記の設計は、「メール」のカテゴリを見つけることができません。人を考慮することは、このカテゴリでは「人」ではなく全体を記述するために一緒にちょうど手、足、上から異なる機能にある。ある意味でそれはあなたが後から機能「ダイレクトメールを送信する」別のモジュールで使用する場合は、使用する前に、あなたは再び上記の4つのクラスの組み合わせでなければなりません。非常に断片化されているが、新しいクラスを指示することはできません、あなたが使用することができますアップそれは高も低い結合凝集ではありませんので、機能「スパムを送信」、「カップリングの高及び低度の組み合わせは、4つのクラス、使用されない機能の欠如の間の関係である。」)

を慎重に分析、あなたは見つけるでしょうこの設計は完全に手続きの機能が設計するプログラマから実装されている、またはデザイン部門という、問題を分析するために、マシンの観点から現実世界の視点に、低いからアップしています。だから、デザインで、プログラミングの詳細は考慮されて実装されている、実世界のニーズを満たすためにソフトウェアの目標を達成するために、このようなプログラムの基本となる実装からの出発点の試み。

実際には、この分析方法は、C#プログラミング言語ので、純粋なオブジェクト指向には適していませんので、C言語、パッケージ2つのC関数に切り替えた場合、それはより論理的にも明らかで、はるかにリラックスを達成することになるよりも、C#の。

だから今、私たちは、上記の文章を繰り返し、再び強調する必要がかつて言った:「オブジェクト指向の考え方の本質は人間の心からの問題を検討することであることは、現実の世界を開始するのが習慣である限り、本の理解として、私たちは理解して思考のオブジェクト指向の方法。」

メッセージは、メッセージヘッダ、メッセージ本体、及びメール送信メールアドレスこれら3つの属性を有し、この方法は、送信を必要とし、この方法はまた、すべてのメールアドレスが記載されていることができる必要があります。次のようにそれを設計する必要があります。

クラスジャンクメールは、

属性:
ヘッド
ボディ
アドレス
方法を:
SENDMAIL()//送信メッセージ
listAllMail()//電子メールアドレス欄は、

C#と表されます。

ジャンクメール{クラス公開
プライベート文字列のヘッド;
プライベート文字列本体;
プライベート文字列のアドレス;

パブリック文字列getHead(){
戻りthis.head;
}
...次のget / setメソッドの3以上に属し、このクラスを作ります純粋なデータモデルクラス。
}

/ **
、操作クラスの静的メソッドに濃縮
* /
publicクラスMailUtil {
プライベートMailUtil(){} //プライベート静的が新規新しい防ぐ

//このパラメータは、クラスとして入力データクラスジャンクメール変更された
公衆BOOLのSendmail静的(ジャンクメール便){...}

//一括メール送信するためのもう一つの方法
はsendmail BOOのパブリックstatic(コレクションメール){
のために(IT = mails.iteratorイテレータ(); it.hasNext();) {
SENDMAIL((ジャンクメール)it.next());
}
}


// ChenGang:ここでのコレクションは、ジャンクメールのコレクションが含まれています。
ArrayListのlistAllMail静的パブリック(){...}
}




ジャンクメールよくして設計されたとき、非常に簡単なものになり、完了するまでに送られたジャンクメールのクラスのメールを呼び出します。

伝統的なプロセス指向のプログラムは、指示処理を実行するマシンに沿ったものである場合には、思考のオブジェクト指向の方法は、実際の生活の中で問題を解決するために人間の思考プロセスに沿ったものです。

オブジェクト指向ソフトウェア分析と設計時には、達成するためのプログラムコードをアップ行きたくないよう自分自身を思い出させるために、特定のプログラミング言語の束縛を脇に置く必要があり、に焦点を当て、我々が達成したいビジネス・ロジック・ソフトウェアを解析し、解析ソフトビジネスプロセスは、考えるべきソフトウェアビジネスを説明し、実装する方法結局のところ、ソフトウェアは、私たちは本当にビジネス目標を達成したいのか、単にキャリアです。

しかし、設計プロセスでは、しかし、私の心は、私は、プログラムコードの完全な実現を考慮していない場合は、その後、どのように私は私のデザインは確かに合理的な知っていることを恐怖の中でしばしばでしたか?私はクラスの設計方法、インタフェースはそれを達成することができます知っていますか?だから、多くの場合、あなたが見ることができる現象が、これは次のとおりです。

設計プロセスでは、それを達成するためのコードを検討するのは時期尚早ではありませんが、それぞれがクラス、インターフェイスを設計し、そして私の心は無意識のうちに自分の使い慣れたプログラミング言語は、おそらく評価に使用しているが、あなたはそれをコンパイルすることができるかどうか、そのため、我々はそれが上がるバック実装プログラム機能の線に沿って古いデザインになると確信しています。

(总结:这种设计思想的出发点是,"发送广告邮件",为了实现这一功能,采用抽象思维思想,"发送"这是一动作,可以考虑在某一个类中将它设计成一个方法,而"邮件",则考虑将其设计成一个类.然后考虑,这两个类如何搭配(或者说是通信),才能达到实现"发送广告邮件",上面的设计是采用类的组合来实现.或者说是将"邮件"这个类的对象注入到包含发送功能的这个类中.)

PS:1.在过去的面向功能实现的更高一层次上来抽象考虑设计类

       比如:上面设计了四个类来实现这一发送邮件功能,事实上将其抽象则就可以将这些"类",降为一个方法而已.

       2.尽量让类之间的通信关系简单或者尽量少

       比如:上面设计了四个类,如果要使用的话,至少NEW四次.

       3.尽量让具有业务模型特征的事物设计成类

       比如:定单可以考虑设计成类.邮件可以考虑设计成类.

       4.确定是往类A注入对象好,还是将类A的对象注入类B好.

       比如:上面的发送邮件,可能某些会考虑让"邮件"类具有发送邮件的方法.为什么不在如此设计呢.

       可以考虑类的简单性设计原则.即职责单一.

转载于:https://www.cnblogs.com/softwareking/archive/2011/03/30/1999442.html

おすすめ

転載: blog.csdn.net/weixin_34161029/article/details/93766394