私は大学生にソフトウェアエンジニアリングを教えていますが、密結合、抽象化の悪さ、カプセル化の低さ、保守性の悪さ、その動作を示すオブジェクト指向コードの塊が欲しいのですが。誰でも良い例がありますか?消化されやすいもの(1時間以内にスキムできるなど)はすばらしいでしょう。前もって感謝します。
「リファクタリング」のためにグーグルかもしれません。多くの場合、「悪いコード」の開始点を提供する前と後の画像、または段階的なプロセスさえあります。
それがうまくいかない場合は、悪いコードの書き方を教えてみませんか?それは逆説的思考の興味深い演習かもしれません。 「不正なコードのルール」を黒板/ホワイトボードに投稿します。
1)メソッド名にスペルミスを埋めようとする
2)非常に短い、長い、または無意味な変数名を使用する
3)異なるスコープで変数名または同様の変数名を再利用してみます
4)コードと一致しないか無意味な長いコメントを記述します(getSalesTax-消費税を取得するメソッド)
5)できるだけ多くの機能を1行にまとめます
他の人は、この回答に不足している95のルールを追加することを歓迎します。
まだ学生のプロジェクトですが、私は恥ずかしそうに私の capstoneプロジェクト の一部を提出します。 Javaで書かれたオープンソースのソフトウェアです。
それはおそらくそれをスクラップしてやり直したくないと思うほど十分に大きいです。
それはいくつかの絶対に恐ろしい構成を特徴としますが、いくつかの重要なセクションを口に合うようにするのに十分な構造を持つべきです。
免責事項:私たちは5人のチームメンバーのうち3人しかいませんでしたが、プロジェクトの一環として、自分自身をJavaに自習して、より挑戦的なものにしました。
あなたがそれを見た場合、私は質問/回答または他のものに利用できます。
本当に気の毒なコードは、多くの場合、人々が気付くほど長くは続きません。まず、sourceforgeの inactive または pre-alpha プロジェクトをチェックアウトしてください。
また、 Robert Martinによるクリーンコード には、そのような種類の概念を一度に1つずつ取り上げる前後の例がたくさんあります。正統な例は1つだけではありませんが、これは私が大学で新入社員全員に読んでもらいたい本です。
プロジェクトの検索に使用する言語を指定することもできます。約1年前、C++で 4次元のgoのクライアントとサーバー をQtで記述しました。私が正しく覚えていれば、約4,000行のコードであり、WindowsとLinuxの両方で動作するはずです。
コードは例外を悪用し、密結合(どこかに悪い友情さえあると思います)、RTTI、とんでもなく悪いネットワークプロトコル(完全に文書化されていない)を使用し、少なくとも2つのクラスが多すぎる(Server
およびClient
)。ああ、それはどんなユニットテストも欠いています。正確に覚えていれば書くのに3週間くらいかかったので小さすぎるかも。
使用することを選択した場合は、質問/苦情で私に連絡してください。
そのようなプロジェクトを生成する興味深い方法は、既存の学生プロジェクトを利用して、十分に長い時間ではない期間に学生に機能を追加するよう要求することだと思います。そのうちのいくつかは、おそらくすぐに取り掛かりますが、リファクタリングを教えてから、最後に(同様の時間枠で)別の機能をリクエストして、学習/実行したことの利点をさらに実証することができます。
かなり簡単です。プロジェクトについて考えてください。1日か2日で人/グループのコードを作成し、設計が悪い理由を説明してください。人々は、自分が知っていること(この場合は自分のコード)に関連するよりもはるかによく学びます。