Newer
Older
pushpullRefactoringExperiments / courseA / ProblemA2.html
<!DOCTYPE HTML>
<html lang="ja">
<head>
    <title>課題A2</title>
    <meta charset="UTF-8">
    <link rel = "stylesheet" type = "text/css" href = "../prettify.css">
</head>
<style>
    .image_size{
        width: 800px;
        height: 550px;
    }
</style>
<body>
<h1>課題A2</h1>

<hr size="5">

<h2>課題の概要</h2>

<p>
    課題A2では,Algolike の HandsA から LoseA へのデータ転送について見ていきます.
    HandsA は,プレイヤーのすべての手札を管理しているクラスで,LoseAは各ターンでプレイヤーがゲームに負けたか否かを表すクラスです.<br>
    この課題では,

    <blockquote>
        <strong>「HandsA の情報が更新されたときにその情報を LoseA にPULL型で転送しているプログラムを,PUSH型で転送するようにリファクタリングすること」</strong>
    </blockquote>

    を目的とします.<br>
    リファクタリングの詳しい作業手順は以下で説明します.
</p>

<hr size="5">

<h2>リファクタリング作業</h2>

<p>
    以下では,リファクタリングに要した時間を測っていただきますので,お手元に時計をご用意ください.<br>
    時間計測にあたって,急いで作業していただく必要はまったくありません.<br>
    最初の課題から最後の課題まで一定のペースを保てるよう, <font color="red">正しくリファクタリングを行うこと</font>を意識してください.<br>
    この課題で作業していただく内容は,
    <blockquote>
        <strong>「HandsA の情報が更新されたときにその情報を LoseA にPULL型で転送しているプログラムを,PUSH型で転送するようにリファクタリングすること」</strong>
    </blockquote>
    です.<br>
    開発環境を立ち上げてソースコードの確認をしていただいて構いませんが,ソースコードの変更は時間計測の準備ができるまで行わないで下さい.<br>
    リファクタリングの具体的な作業手順を以下に説明します.
    まず,現時点での HandsA から LoseA へのデータ転送に関するクラス図とシーケンス図を以下に示します.<br>
    <img src="../images/algo_class_pull.jpg" class = "halfSize">
    <img src="../images/algo_seq_pull.jpg" class = "halfSize"><br>
    現時点ではPULL型のデータ転送で実装されているため,HandsA クラスの getValue() メソッドを呼び出すために LoseA クラスが HandsA クラスを参照しています.<br>
    ここで,Algo クラスは HandsA クラスや LoseA クラスのインスタンスを生成し,それらのインスタンスを関連付ける役割を担っています.<br>
    また,HandsA クラスや LoseA クラスにアクセスするための入口(Facade)としての役割も担っています.<br>
    これを以下のクラス図とシーケンス図に示すようにPUSH型のデータ転送になるよう手作業でリファクタリングを行っていただきます.<br>
    <img src="../images/algo_class_push.jpg" class = "halfSize">
    <img src="../images/algo_seq_push.jpg" class = "halfSize"><br>
    今度はPUSH型のデータ転送であるため,LoseA クラスの updateHanddsA() メソッドを呼び出すために HandsA クラスが LoseA クラスを参照していることに注意してください.<br>
    それではリンク先を開いて作業の準備ができ次第,<font color="red">時間計測を開始</font>してください. 時間計測はできる限り,1分以内の単位での計測をお願いします. <br>
</p>

<blockquote>
    <p><a href="../debugger-like/debugger.html?key=1" target="_blank">ArgoUMLの削除機能で実行されるソースコード(一部)</a></p>
</blockquote>
<blockquote>
    <a href="../realPrograms/ArgoUML/actionRemoveFromDiagram/ExtendedSequenceDiagram.html?title=課題A1&subject=選択された図形(FigClassオブジェクト)の削除" target="_blank">課題A1の拡張シーケンス図による表現</a>
</blockquote>

<p>
    プログラム理解の作業について以下のアンケートにお答えください.
</p>

<blockquote>
    <a href="https://docs.google.com/forms/d/e/1FAIpQLSfao9lsPqWctRXhEs9osVTjSGdqwwgyEdOqsdTt52c19TABhQ/viewform?usp=sf_link" target="_blank">アンケート回答</a>
</blockquote>

<hr size="5">

<h2>プログラムと可視化に関する設問</h2>

<p>
    課題A1のプログラムと可視化について,以下のリンク先の複数の設問にお答えいただきます.その際にも時間計測をお願いいたします.<br>
    解答の際には,ソースコードと拡張シーケンス図を何度ご覧いただいてもかまいません.時間が掛かってもかまいませんので,できる限り正確な解答をお願いいたします.<br>
    以下のリンク先をクリックしてから,すべての設問の解答を終えるまでの時間を計測してください.こちらもできる限り,1分以内の単位での計測をお願いします. <br>
</p>

<blockquote>
    <a href="https://docs.google.com/forms/d/e/1FAIpQLSeGmxZNj3Gn1WnUot23EbpA677_gjAuglDpZ-mY4CPKu7JYjA/viewform?usp=sf_link" target="_blank">設問およびアンケート回答</a>
</blockquote>

<p style="margin-bottom:2em;"></p>
<a href="ProblemA2.html">次へ</a>
</body>