Starting from:

$30

Assignment 5

Assignment    5
Objectives:
• To create a binary tree using an array.
• To create a priority queue.
• To apply data abstraction: hiding a complex data type inside a simpler ADT.
• To continue exposure to the principles of inheritance, encapsulation and modularity.
• To continue to practice unit testing.
Introduction
A    group    of    patients    are    sitting    in    the    Emergency    Room    waiting    room    at    the    local    
hospital,    when    the    attending    physician    arrives    for    her    shift.    The    triage    nurse    has    
already    assessed    patients    by    their    main    complaint    and    provides    an    electronic    device    
whereby    the    physician    can    touch    the    screen and    the    next    patient    chart    is    provided.    
The    order    of    the    list    is    determined    by    the    patient's    priority.    You    have    been    selected    
to    write    part    of    the    software    that    stores    the    patient    information    and    prioritizes    the    
list    for    the    ER physician.    Your    boss    wants    the    code    to    be    in    the    form    of    a    priority    
queue    that    uses    an    array-based    heap    to    store    the    ER_Patient    objects    (this    class    has    
already    been    completed).
Preparation
1. Refer    to Chapter    12    of    the    textbook    for    background    on the    array-based    heap    
and    the    PriorityQueue    ADT.    We    will    be    avoiding    the    use    of    generic    datatypes    
in    this    assignment    and    referencing    the    provided    ER_Patient    class.    Note    that    
the    Heap    is    the    hidden    data type    we    will use    as    the    main    instance    variable    of    
the    PriorityQueue
2. Download    all    the    necessary    java    files    for    this    assignment    into    a    folder    created    
for    this    assignment.
3. All    the    files    will    compile;    run    javac *.java.        During    the    process    of    completing
the    assignment,    check    to    make    sure    everything    still    compiles    before    
continuing.        
4. Familiarize    yourself    with    the    ER_Patient class.        It    is    the    item that    will    be    
stored    in    the    Heap,    so    you    will    need    to    know    how    to    instantiate    it    and    
compare    the    priorities    of    two    patients.        You    do    not    need    to    understand    the    
implementation,    but    you    are    welcome    to,    for    learning    purposes.        You    can    
easily    work    with    the    class    by    reading    the    documentation;    simply    run    
javadoc ER_Patient.java NoSuchCategoryException.java and    then    
open    the    index.html file that    was    created.
Implementation    details
You    are    to    write and    test the    implementation    of    the    Heap    and    PriorityQueue    classes.    
The    following    ordered    steps    are    provided    to    guide    you:
1. Complete    the    Heap    class:
a. A    shell    has    been    provided.    Fill    in    the    comments    above    each    of    the    
public    methods    and    write the    code    that    makes    these    methods    work.        
b. You    are    strongly    encouraged to    add    as    many    additional    instance    
variables    and    methods    as    you    need.    However,    you    must    not    change    
the    provided    method    headers    or the    instance    variable.        There    are    two    
reasons    for    this    requirement:
i. You    are    a    programmer    on    a    team;    others    are    expecting    their    
code to    plug    into    your    code.
ii. You    are    a    student    in    CSC115,    doing    an    exercise    that    enhances    
your    skills    as    a    programmer.        To    obtain    adequate    feedback,    the    
marker(s)    are    counting    on    easy    access    to your    implementation.
c. Note    that    the    array    size    is    not    determined    or    limited.    Somewhere    in    
the    source    code,    there    must    be    a    provision    for    increasing    the    size    of    
the    array    to    accommodate    large    numbers of    patients.    It    is    not    
sufficient    to    assume    an upper    limit    on    the    number    of    patients    in    an    
ER.;    it    is    also    not    good    programming    practice.    Create    a    private    method    
that    doubles    the    size    of    the    array    to    accommodate    more    patients    into    
a    full    array.
d. You    must    test    all    of    your    public    Heap    methods    in    the    main    method.    
The    more    rigorously    you    test,    the    more    robust    your    code. Do    not    move    
to    the    next    step    until    you    are    confident    that    your    Heap    works    as    
expected.    
i. Note    that    the    ER_Patient    main    class    has    a    unit    tester.        It    uses    a    
Thread.sleep() call    to    spread    a    single    second between    admit    
times.        You    may    use    this    technique    or    choose    to    create    your    
own    times    and    insert    them    into    one    of    the    constructors.        For    
the    sake    of    the    marker’s    sanity,    DO    NOT    use    Thread.sleep    in    any    
method    other    than    main.
2. Complete    the    PriorityQueue    class using    a    Heap    data    structure    as    the    main    
instance    variable.
a. Comment    each    of    the    methods    appropriately
b. Fill    in    each    of    the    methods.    HINT:    Let    the    hidden    Heap    do    all    the    work    
for    the    PriorityQueue.
i. Note    that    the default    constructor    is    complete    as    is.
c. Test    the    PriorityQueue:
i. If    the    Heap    has    been    thoroughly    tested,    it    is    sufficient    to    insert    
a    few    patients    and    then    dequeue    and    print    until    the    queue    is    
empty.        A    sorted    print    out    indicates    success.
Some    tips    and    considerations
• As    in    the    previous    assignment,    there    are    hidden    gems    to    learn    from    the    
professional    style    of    the    programming;    please    take    advantage    of    these,    by
reading    the    code    thoroughly,    until you    understand    it.        
• It    is    a    good    idea    to    create    private    methods    that    help    you    test    your    code.        For    
instance,    a    method    that    prints    out    the    contents    of    the    array    in    the    Heap    class    
is    a    handy    tool    to    mark    the    progress    of    the    implementation.        Because    it    is    
private,    only    the    programmer    can    use    it.
The    Heap    vs    the    PriorityQueue
A    PriorityQueue    can    use    a    linked    data    structure,    an    un-ordered    array,    an    ordered    
array, or    a    tree    as    its    private    data    structure.    We    use    the    Heap    in    this    exercise,    
because    the    Heap    data    structure    is    so    beautifully    similar    to    a    PriorityQueue    and    
takes    O(log    n)    for    both    insert and    remove operations.    However,    the    Heap    is    a    
complete    binary    tree    data    structure    and    is    not    necessarily    bound    by    the    
PriorityQueue    ADT.    For    instance,    it    is    allowed    to    have    an    iterator    and    it    is    allowed    to    
have    a    size    method.    There are    other    tree-related    methods    such    as    isInternal    that    are    
not    part    of    the    PriorityQueue    ADT.    There    is    also    nothing    stopping    a    Heap    from    
deleting    an    item    in    the    middle    of    its    structure,    although    there    are    better    data    
structures    for    that    kind    of    operation.
The    PriorityQueue    ADT    is    much    more    limiting.    For    that    reason,    you    want    to    make    
sure    that    the    user    does    not    ever    have    access    to    the    Heap    itself.    It    is    desirable    to    have    
the PriorityQueue    hide    any    extra functionality    of    the    Heap.
Submission
Submit    your    Heap.java and    PriorityQueue.java using    conneX.        Please    be    sure    you    
submit    your    assignment,    not    just    save    a    draft.
A    reminder    that    it    is    OK    to    talk    about    your    assignment    with    your    classmates,    and    
you    are    encouraged    to    design    solutions    together,    but    each    student must    implement    
their    own    solution.
Grading
If    you    submit    something    that    does    not    compile,    you    will    receive    a    grade    of    0    for    the    
assignment.        It    is    your    responsibility    to    make    sure    you    submit    the    correct    files.        
Requirement Marks
You    submit    something    that    compiles expected
Method    commenting    style 1
All    specifications    implemented    and    
correct 7
Thorough unit    testing 2

More products