<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>CS360</title><link href="https://lums-cs360-web.github.io/lums-cs360/" rel="alternate"/><link href="https://lums-cs360-web.github.io/lums-cs360/feeds/all.atom.xml" rel="self"/><id>https://lums-cs360-web.github.io/lums-cs360/</id><updated>2026-01-19T00:00:00+05:00</updated><subtitle>Copyright @ CMPUT301 - University of Alberta</subtitle><entry><title>Course Outline Spring 2026</title><link href="https://lums-cs360-web.github.io/lums-cs360/general/outline.html" rel="alternate"/><published>2026-01-19T00:00:00+05:00</published><updated>2026-01-19T00:00:00+05:00</updated><author><name>LUMS</name></author><id>tag:lums-cs360-web.github.io,2026-01-19:/lums-cs360/general/outline.html</id><summary type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019.
status: published
summary: Lecture, Labs, Contact Information, Lecturer, Teaching Assistants, Course Content, Course Description, Prerequisites, Objectives and Learning Outcomes, Course Topics, Learning Resources, Course Schedule, Required Textbook and/or Other Major Course Materials, Recommended or Optional Learning Resources, Course Fees, On-Line Homework Disclaimer, Academic Success Centre, Faculty of Science Student Services, Grade Evaluation, Letter Grades, Statement of Expectations for AI Use, Re-Evaluation of Term Work, Re-examination, Past or Representative Evaluative Material, Labs, Participation, Policies for Late and Missed Work, Late Policy, Non-medical Protected Grounds, Missed Term Work: Assignments, Labs, Quizzes, Project Parts, Midterm Exams, Missed Term Work: Participation, Deferred Final Examination, Required Technology, Labs Assignments and Project, Lecture Participation, Remote Delivery Considerations, Technology Requirements, Recordings of Synchronous Activities, Home-Based Lab Activities, Student Resources for Remote Learning, Student Responsibilities, Academic Integrity and Student Conduct, Contract Cheating and Misuse of University Academic Materials or Other Assets, Contract Cheating: CS Courses, Academic Integrity Issues Related to Minor Formative Assessments, Appropriate Collaboration, Citation, Solo Effort: Participation Exercises, Quizzes, Exams, Confidential: Exams, Consultation: Assignments, Labs, Teamwork: Group Projects, Intellectual Violence, Exam Conduct, Lecture Conduct, Students Eligible for Accessibility-Related Accommodations, Recording and/or Distribution of Course Materials, On-Campus Computer Labs, Recording and/or Distribution of Course Materials, Learning and Working Environment, Feeling Stressed, Anxious, or Upset?, Student Self-Care Guide, Land Acknowledgement, Administrative, Policy about Course Outlines, Disclaimer, Update History, Copyright&lt;/p&gt;
&lt;hr&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#course-instructors"&gt;Course Instructors&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#dr-abdul-ali-bangash"&gt;Dr. Abdul Ali Bangash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#dr-suleman-shahid"&gt;Dr. Suleman Shahid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#safa-salam"&gt;Safa Salam&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#lecture-information"&gt;Lecture Information&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#labs-online-615pm-to-830pm-wedthur"&gt;Labs: Online 6:15pm to 8:30pm Wed/Thur&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;CS360: Software Engineering&lt;/strong&gt;  &lt;br&gt;
&lt;strong&gt;Spring 2026&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id="course-instructors"&gt;Course Instructors&lt;/h4&gt;
&lt;h5 id="dr-abdul-ali-bangash"&gt;Dr. Abdul Ali Bangash&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Email:&lt;/strong&gt; &lt;a href="mailto:abdulali@lums.edu.pk"&gt;abdulali@lums.edu.pk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Office:&lt;/strong&gt; 9-G20A  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Office Hours:&lt;/strong&gt; TBA  &lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="dr-suleman-shahid"&gt;Dr. Suleman Shahid&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Email:&lt;/strong&gt; &lt;a href="mailto:suleman.shahid@lums.edu.pk"&gt;suleman.shahid@lums.edu.pk&lt;/a&gt;  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Office:&lt;/strong&gt; 9-G46A  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Office Hours:&lt;/strong&gt; TBA  &lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="safa-salam"&gt;Safa Salam&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Email:&lt;/strong&gt; &lt;a href="mailto:safa.salam@lums.edu.pk"&gt;safa.salam@lums.edu.pk&lt;/a&gt;  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Office:&lt;/strong&gt; 9-G48 &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Office Hours:&lt;/strong&gt; Mon/Wed 10-12pm Fri 3-5PM &lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id="lecture-information"&gt;Lecture Information&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Lecture Room:&lt;/strong&gt; SDSB B3  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lecture Time:&lt;/strong&gt; Tuesday &amp;amp; Thursday, 01:00 PM – 02:15 PM  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Teaching Assistant(s):&lt;/strong&gt; Available on LMS &lt;/p&gt;
&lt;h4 id="labs-online-615pm-to-830pm-wedthur"&gt;&lt;strong&gt;Labs:&lt;/strong&gt; Online 6:15pm to 8:30pm Wed/Thur&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;COURSE CONTENT&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Calendar Description:&lt;/strong&gt; &lt;br&gt;
As an introduction to software engineering, this course is about building software effectively. You will apply good practices, effective design techniques, and development tools within a team project to create an application with a graphical user interface.&lt;/p&gt;
&lt;p&gt;The focus is largely practical, with broad coverage in topics such as: object-oriented design, user interfaces, unit testing, design patterns, and refactoring.&lt;/p&gt;
&lt;p&gt;Communication skills, team dynamics, working with a "customer", and creativity are also important factors in the course project. The knowledge, skills, and experience you gain will be invaluable in your future software development projects.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Course Objectives and Expected Learning Outcomes:&lt;/strong&gt;&lt;br&gt;
We will learn about applying software engineering concepts to design and implement interactive applications.&lt;/p&gt;
&lt;p&gt;One effective way to build such applications is to apply object-oriented design and use software components. To be useful to end users, the design of these applications must also be guided by usability principles. The course involves a team project in building a well-designed Java/Android application with a sophisticated graphical user interface.&lt;/p&gt;
&lt;p&gt;By the end of this course, you will have a strong background in basic software engineering concepts. Also, you will have the skills to implement interactive applications in Android. You will learn to propose and think critically about software and user interface designs.&lt;/p&gt;
&lt;p&gt;Students are expected to participate in all classes and labs.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;LEARNING RESOURCES&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Required Course Materials:&lt;/strong&gt;&lt;br&gt;
This course does not have a required textbook. There are a number of excellent resources for this course, available as electronic books or through open access on the Web. See the course LMS for links.&lt;/p&gt;
&lt;p&gt;Images reproduced in lecture slides have been included under section 29 of the Copyright Act, as fair dealing for research, private study, criticism, or review. Further distribution or uses may infringe copyright on these images.&lt;/p&gt;
&lt;p&gt;In addition to fair dealing, the Copyright Act specifically exempts projected displays by educational institutions for the purposes of education or training on the premises of the education institution.&lt;/p&gt;
&lt;p&gt;Copyright regulations, however, prohibit me from distributing complete copies of the lecture slides on the course site.&lt;/p&gt;
&lt;p&gt;You may assume that any code examples we provide to you are public domain and free for you to take without attribution, unless they are licensed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Recommended or Optional Learning Resources:&lt;/strong&gt;&lt;br&gt;
See the resources page on the course webpage.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Course Schedule &amp;amp; Assigned Readings:&lt;/strong&gt;&lt;br&gt;
See the online live schedule here: &lt;a href="https://docs.google.com/spreadsheets/d/1WXOvrmoseOKpqhYd16F1AkesHH3Ew_GlPVFuwbTS_4Y/edit?usp=sharing"&gt;https://docs.google.com/spreadsheets/d/1WXOvrmoseOKpqhYd16F1AkesHH3Ew_GlPVFuwbTS_4Y/edit?usp=sharing&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Other Course Fees:&lt;/strong&gt;&lt;br&gt;
Students will be required to use the online service Firebase in order to complete the coursework and course project. The expected fees are $0, however, Firebase may assess fees if storage, bandwidth, user, or operation limits are exceeded. One member of the group will be required to supply payment information. It is the responsibility of the student to pay for any Firebase charges. If you are unable to pay these fees, you must contact your TA and instructor immediately. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;On-Line Homework Disclaimer:&lt;/strong&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Online homework is a component of this course and is provided by a third-party company. Please be aware that this company will be storing assessment information that may be associated with you. As a way to protect your personal information, you may be assigned a random ID to enter into the system. Only the random ID, performance on the online homework, and the affiliation to the LUMS for this random ID will be conveyed to the company. You are not required to provide any additional personal information to this company. If you have concerns about this, please contact the instructor of the course.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Firebase (Google) - See "Course Fees" above.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Registration in the system and any monetary transactions are of your own accord and not the responsibility of the University.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Students should be mindful of protecting their personal information and should be aware of how their personal information might be used and/or shared.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Students MUST NOT use their LUMS email to register into the system and instead should use a non-identifying email address or account.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;REMOTE DELIVERY CONSIDERATIONS&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hybrid Synchronous Delivery:&lt;/strong&gt;&lt;br&gt;
There are no online lectures or recorded lectures. Lectures are in person.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GRADE EVALUATION&lt;/strong&gt;&lt;/p&gt;
&lt;!-- | Assessment | Weight | Collaboration Policy | Date |
| :---- | ----- | ----- | ----- |
| Participation | 8% | Solo Effort | Most Lectures |
| Labs | 5% | Consultation | Fridays 5:00pm |
| Assignment 0 | 1% | Consultation | \~ Week 3 - 2025-09-19 5pm |
| Project Part 0 | 1% | Teamwork | \~ Week 3 - 2025-09-19 5pm |
| Assignment 1 | 8% | Consultation | \~ Week 4 - 2025-10-01 5pm|
| Project Part 1 | 1% | Teamwork | \~ Week 4 - 2025-09-30 5pm |
| Project Part 2 | 5% | Teamwork | \~ Week 6 -  2025-10-14 5pm|
| Project Part 3 | 10% | Teamwork | \~ Week 9 - 2025-11-07 5pm |
| Project Part 4 | 16% | Teamwork | \~ Week 13 - 2025-12-01 5pm |
| Midterms | 15% x 3 \= 45% | Confidential | MT1 \~ Week  4 2025-09-26 MT2 \~ Week  8 2025-10-24 MT3 \~ Week 14 2025-12-05 | --&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left;"&gt;Assessment&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Weight&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Collaboration Policy&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Date&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Participation&lt;/td&gt;
&lt;td style="text-align: left;"&gt;8%&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Solo Effort&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Most Lectures&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Labs&lt;/td&gt;
&lt;td style="text-align: left;"&gt;5%&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Consultation&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Tuesdays 5:00pm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Assignment 0&lt;/td&gt;
&lt;td style="text-align: left;"&gt;1%&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Consultation&lt;/td&gt;
&lt;td style="text-align: left;"&gt;~ Week 3 - 2026-02-05 5pm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Project Part 0&lt;/td&gt;
&lt;td style="text-align: left;"&gt;1%&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Teamwork&lt;/td&gt;
&lt;td style="text-align: left;"&gt;~ Week 3 - 2026-02-05 5pm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Assignment 1&lt;/td&gt;
&lt;td style="text-align: left;"&gt;8%&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Consultation&lt;/td&gt;
&lt;td style="text-align: left;"&gt;~ Week 5 - 2026-02-17 5pm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Project Part 1&lt;/td&gt;
&lt;td style="text-align: left;"&gt;1%&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Teamwork&lt;/td&gt;
&lt;td style="text-align: left;"&gt;~ Week 5 - 2026-02-16 5pm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Project Part 2&lt;/td&gt;
&lt;td style="text-align: left;"&gt;5%&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Teamwork&lt;/td&gt;
&lt;td style="text-align: left;"&gt;~ Week 8 - 2026-03-10 5pm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Project Part 3&lt;/td&gt;
&lt;td style="text-align: left;"&gt;10%&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Teamwork&lt;/td&gt;
&lt;td style="text-align: left;"&gt;~ Week 10 - 2026-03-26 5pm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Project Part 4&lt;/td&gt;
&lt;td style="text-align: left;"&gt;16%&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Teamwork&lt;/td&gt;
&lt;td style="text-align: left;"&gt;~ Week 14 - 2026-04-19 5pm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Midterms&lt;/td&gt;
&lt;td style="text-align: left;"&gt;45%&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Confidential&lt;/td&gt;
&lt;td style="text-align: left;"&gt;MT1 - 20% - 2026-03-12&lt;br&gt;MT2 - 25% - 2026-04-23&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Grades are unofficial until approved by the Department and/or Faculty offering the course.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Midterm Dates&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;50 minute exams at:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Midterm 1&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;March 12, 2026 &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Midterm 2&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;April 23, 2026 &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Re-examination:&lt;/strong&gt; &lt;br&gt;
There is no possibility of a re-examination in this course.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Course Grades Obtained by Undergraduate Students&lt;/strong&gt;:&lt;br&gt;
This table reflects the GPA Point Value and Descriptor (e.g., Excellent, Good) for each Letter Grade.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left;"&gt;Descriptor&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Letter Grade&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Grade Point Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Excellent&lt;/td&gt;
&lt;td style="text-align: left;"&gt;A+&lt;/td&gt;
&lt;td style="text-align: left;"&gt;4.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Excellent&lt;/td&gt;
&lt;td style="text-align: left;"&gt;A&lt;/td&gt;
&lt;td style="text-align: left;"&gt;4.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Excellent&lt;/td&gt;
&lt;td style="text-align: left;"&gt;A-&lt;/td&gt;
&lt;td style="text-align: left;"&gt;3.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Good&lt;/td&gt;
&lt;td style="text-align: left;"&gt;B+&lt;/td&gt;
&lt;td style="text-align: left;"&gt;3.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Good&lt;/td&gt;
&lt;td style="text-align: left;"&gt;B&lt;/td&gt;
&lt;td style="text-align: left;"&gt;3.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Good&lt;/td&gt;
&lt;td style="text-align: left;"&gt;B-&lt;/td&gt;
&lt;td style="text-align: left;"&gt;2.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Satisfactory&lt;/td&gt;
&lt;td style="text-align: left;"&gt;C+&lt;/td&gt;
&lt;td style="text-align: left;"&gt;2.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Satisfactory&lt;/td&gt;
&lt;td style="text-align: left;"&gt;C&lt;/td&gt;
&lt;td style="text-align: left;"&gt;2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Satisfactory&lt;/td&gt;
&lt;td style="text-align: left;"&gt;C-&lt;/td&gt;
&lt;td style="text-align: left;"&gt;1.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Poor&lt;/td&gt;
&lt;td style="text-align: left;"&gt;D+&lt;/td&gt;
&lt;td style="text-align: left;"&gt;1.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Minimal Pass&lt;/td&gt;
&lt;td style="text-align: left;"&gt;D&lt;/td&gt;
&lt;td style="text-align: left;"&gt;1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Failure&lt;/td&gt;
&lt;td style="text-align: left;"&gt;F or F4&lt;/td&gt;
&lt;td style="text-align: left;"&gt;0.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Note: F4 denotes eligibility of a student to apply for a re-examination in a course.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Course Grades Obtained by Graduate Students:&lt;/strong&gt;&lt;br&gt;
This table reflects the GPA Point Value and Descriptor (e.g., Excellent, Good) for each Letter Grade.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left;"&gt;Descriptor&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Letter Grade&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Grade Point Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Excellent&lt;/td&gt;
&lt;td style="text-align: left;"&gt;A+&lt;/td&gt;
&lt;td style="text-align: left;"&gt;4.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Excellent&lt;/td&gt;
&lt;td style="text-align: left;"&gt;A&lt;/td&gt;
&lt;td style="text-align: left;"&gt;4.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Excellent&lt;/td&gt;
&lt;td style="text-align: left;"&gt;A-&lt;/td&gt;
&lt;td style="text-align: left;"&gt;3.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Good&lt;/td&gt;
&lt;td style="text-align: left;"&gt;B+&lt;/td&gt;
&lt;td style="text-align: left;"&gt;3.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Good&lt;/td&gt;
&lt;td style="text-align: left;"&gt;B&lt;/td&gt;
&lt;td style="text-align: left;"&gt;3.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Satisfactory&lt;/td&gt;
&lt;td style="text-align: left;"&gt;B-&lt;/td&gt;
&lt;td style="text-align: left;"&gt;2.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Satisfactory&lt;/td&gt;
&lt;td style="text-align: left;"&gt;C+&lt;/td&gt;
&lt;td style="text-align: left;"&gt;2.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Failure&lt;/td&gt;
&lt;td style="text-align: left;"&gt;C&lt;/td&gt;
&lt;td style="text-align: left;"&gt;2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Failure&lt;/td&gt;
&lt;td style="text-align: left;"&gt;C-&lt;/td&gt;
&lt;td style="text-align: left;"&gt;1.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Failure&lt;/td&gt;
&lt;td style="text-align: left;"&gt;D+&lt;/td&gt;
&lt;td style="text-align: left;"&gt;1.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Failure&lt;/td&gt;
&lt;td style="text-align: left;"&gt;D&lt;/td&gt;
&lt;td style="text-align: left;"&gt;1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Failure&lt;/td&gt;
&lt;td style="text-align: left;"&gt;F&lt;/td&gt;
&lt;td style="text-align: left;"&gt;0.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Statement of Expectations for AI Use:&lt;/strong&gt;&lt;br&gt;
You MUST not submit work by LLMs as your own, that is plagiarism. This also applies to other "AI" and Generative Models: ChatGPT, Lex, Page, DALL-E2, Google BARD/Gemini, Microsoft Bing/Copilot, and others. If you use LLMs you must cite it. This includes the corporation that made the AI, the AI, Subject, and Date. For example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// The following function is from Microsoft, Copilot, &amp;quot;How do I write a merge sort in JavaScript?&amp;quot;, 2023-08-31&lt;/span&gt;

&lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mergeSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;array&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If you use LLMs you must cite it, but it's probably better to Google what it tells you and find a real citation because:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;LLMs like ChatGPT are wrong a lot.&lt;/strong&gt; It does not understand computer science. It understands how to form sentences and paragraphs well enough to be convincing, but it doesn't actually understand what anything it is saying means. When it has the choice between two answers, with opposite meanings, it will pick the answer that looks more like things it has seen before, not the answer that is more correct. This means you need to double-check that what it tells you is actually correct.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;StackOverflow is always a better resource&lt;/strong&gt; than Large Language Models such as ChatGPT, Copilot, Bard/Gemini, etc., but of course if you use code from StackOverflow or any other website, &lt;strong&gt;you must cite it.&lt;/strong&gt; This is because other human programmers will usually check and downvote, remove, or fix bad information on StackOverflow. No one is checking the output of LLMs: if an LLM lies to you, no one will ever know.&lt;/p&gt;
&lt;p&gt;ChatGPT and similar services are recording everything you tell it, and tracking you. Using ChatGPT/Bing/Bard etc. they are recording everything you say and how the LLM responds to you. There is no privacy.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ChatGPT example from another course:  &lt;/li&gt;
&lt;li&gt;Me: "What is the difference between the b and j pseudoinstruction in RISC-V?"  &lt;/li&gt;
&lt;li&gt;ChatGPT: "... The b instruction is actually a shorthand for the more general beq (branch if equal) instruction, which compares two registers and branches if they are equal. However, &amp;gt; &amp;gt; in the case of b, one of the registers is always x0 (the zero register), so the comparison &amp;gt; is always false, effectively causing an unconditional jump. ...the key difference between b &amp;gt; and j is that b is a relative branch instruction that jumps to a location within a limited range, while j is an absolute jump instruction that can jump to any address within the range of the program counter."  &lt;/li&gt;
&lt;li&gt;There are 3 problems with this answer:  &lt;/li&gt;
&lt;li&gt;b is not shorthand for beq: RARS replaces it with jal -- the actual replacement depends on the assembler used and the situation it is used in.  &lt;/li&gt;
&lt;li&gt;This also makes ChatGPT's conclusion about relative limited range jumps and absolute jumps wrong. All jumps and branches in RISC-V are relative, short range jumps except jalr. RARS also (at least in every case I've seen) translates j to jal, not jalr, and jal is also a short-range, relative jump.  &lt;/li&gt;
&lt;li&gt;If b gets translated to beq x0, Y, label then what guarantees that the other register isn't also zero? The comparison with beq x0, Y cannot always be false, despite what ChatGPT claimed. This really doesn't make any sense. It would make more sense for it to be translated to bne x0, x0, label ... but that's the opposite instruction of what ChatGPT claimed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Re-evaluation of Term Work:&lt;/strong&gt;&lt;br&gt;
Any questions or concerns about marks on a particular assignment must be brought to the attention of the instructor &lt;em&gt;(not a TA)&lt;/em&gt; within 7 calendar days of its return date. After that, we will not consider remarking or re-evaluating the work. So do not expect anyone to re-evaluate all the work you did all term long in the hopes of getting a higher final grade.&lt;/p&gt;
&lt;p&gt;However, clerical errors such as incorrectly computing or recording a mark may be raised at any time prior to 2 business days following the final exam. It is the student's responsibility to confirm that their term work has been recorded properly.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;POLICIES FOR LATE AND MISSED WORK&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Late Policies:&lt;/strong&gt;&lt;/p&gt;
&lt;!-- **Absence Form:**  
This course uses a Google form to request excused absences for term work. This form needs to be filled out by students if they wish to request an excused absence for any deliverable. Emails to instructors or TAs **will not be accepted** as timely notification for an excused absence. --&gt;

&lt;p&gt;&lt;strong&gt;Missed Term Work/Final Exam Due to Non-medical Protected Grounds (e.g., religious beliefs):&lt;/strong&gt;&lt;br&gt;
When a term assessment or final exam presents a conflict based on non-medical protected grounds, students must apply for a petition from OSA. Students can review their eligibility and choose the application process specific for Accommodations Based on Non-medical Protected Grounds.&lt;/p&gt;
&lt;p&gt;It is imperative that students review the dates of all course assessments upon receipt of the course syllabus, and apply AS SOON AS POSSIBLE to ensure the timely application of the accommodation. Students who apply later in the term may experience unavoidable delays in the processing of the application, which can affect the accommodation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Missed Labs:&lt;/strong&gt; &lt;br&gt;
Labs are due Friday at 5PM on the same week the lab was presented. Project meetings are due at the time of the meeting, and they are included in the lab mark. Failure to attend and actively participate in project meetings will result in a lab mark of zero.&lt;/p&gt;
&lt;p&gt;The 2 lowest marks for Labs (including project meetings) will be dropped when calculating the course mark. No late labs will be accepted. Failure to complete a lab (or to attend a project meeting) on time for any reason will result in a mark of zero. Please note that you can miss 2 labs (or project meetings) without penalty.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Missed Lecture Participation:&lt;/strong&gt;&lt;br&gt;
Participation exercises will be available at most lectures.&lt;/p&gt;
&lt;p&gt;The 6 lowest marks for lecture participation will be dropped when calculating the course mark. No late participation will be accepted. Failure to complete a participation exercise on time for any reason will result in a mark of zero. Please note that you can miss 6 lectures without penalty.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Missed Assignments, Project Parts, Quizzes, Midterm Exams:&lt;/strong&gt;&lt;br&gt;
A student who cannot complete an assignment, project part, quiz, or midterm exam, due to incapacitating illness, severe domestic affliction or other compelling reasons must contact the instructor within two business days of missing the assessment, or as soon as possible, to request an excused absence using the absence form. If an excused absence is granted, then the deliverable weight will be split and shared over other deliverables in the same category. If a Midterm exam is missed, then its weight will be split and shared over the other Midterm exams. An excused absence is a privilege and not a right. There is no guarantee that an absence will be excused. Misrepresentation of facts to gain an excused absence is a serious breach of the Student Academic Integrity Policy. In all cases, instructors may request adequate documentation to substantiate the reason for the absence at their discretion.&lt;/p&gt;
&lt;p&gt;Failure to complete an assignment or contribute to a project part without an excused absence will result in a raw score of zero or a proportional score reduction.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Additional information regarding missed Midterm Exams:&lt;/strong&gt;
If Midterm 3 is missed, then it will be replaced by a deferred exam that will include an oral examination component. The time of this deferred + oral exam will be determined individually between student and instructor. &lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;STUDENT RESPONSIBILITIES&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Academic Integrity and Student Conduct:&lt;/strong&gt; &lt;br&gt;
LUMS is committed to the highest standards of academic integrity and honesty, as well as maintaining a learning environment that fosters the safety, security, and inherent dignity of each member of the community, ensuring students conduct themselves accordingly. Students are expected to be familiar with the standards of academic honesty and appropriate student conduct, and to uphold the policies of the University in this respect.&lt;/p&gt;
&lt;p&gt;Students are particularly urged to familiarize themselves with the academic policy, and avoid any behaviour that could potentially result in suspicions of academic misconduct (e.g., cheating, plagiarism, misrepresentation of facts, participation in an offence) and non-academic misconduct (e.g., discrimination, harassment, physical assault). Academic and non-academic misconduct are taken very seriously and can result in suspension or expulsion from the University.&lt;/p&gt;
&lt;p&gt;All forms of academic dishonesty are unacceptable at the University. Unfamiliarity of the rules, procrastination or personal pressures are not acceptable excuses for committing an offence. Listen to your instructor, be a good person, ask for help when you need it, and do your own work -- this will lead you toward a path to success. Any academic integrity concern in this course will be reported to the College of Natural and Applied Sciences.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;"Integrity is doing the right thing, even when no one is watching"&lt;/em&gt; -- C.S. Lewis&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Contract Cheating and Misuse of University Academic Materials or Other Assets:&lt;/strong&gt;&lt;br&gt;
Contract cheating describes the form of academic dishonesty where students get academic work completed on their behalf, which they submit for academic credit as if they had created it themselves. Contract cheating may or may not involve the payment of a fee to a third party, who then creates the work for the student.&lt;/p&gt;
&lt;p&gt;Examples include:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Getting someone to write an essay or research paper for you.  &lt;/li&gt;
&lt;li&gt;Getting someone to complete your assignment or exam for you.  &lt;/li&gt;
&lt;li&gt;Posting an essay, assignment, or exam question to a tutorial or study website; the question is answered by a "content expert", then you copy it and submit it as your own answer.  &lt;/li&gt;
&lt;li&gt;Posting your solutions to a tutorial/study website, public server, or group chat and/or copying solutions that were posted to a tutorial/study website, public server, or group chat.  &lt;/li&gt;
&lt;li&gt;Sharing your login credentials to the course management system (e.g., Canvas) and allowing someone else to complete your assignment or exam remotely.  &lt;/li&gt;
&lt;li&gt;Using an artificial intelligence bot or text generator tool to complete your essay, research paper, assignment, or exam solutions for you (without the instructor's permission).  &lt;/li&gt;
&lt;li&gt;Using an online grammar checker to "fix" your essay, research paper, assignment, or exam solutions for you (without the instructor's permission).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Contract cheating companies thrive on making students believe that they cannot succeed without their help; they attempt to convince students that cheating is the only way to succeed.&lt;/p&gt;
&lt;p&gt;Uploading the instructor's teaching materials (e.g., course outlines, lecture slides, assignment, or exam questions, etc.) to tutorial, study, or note-sharing websites or public servers is a copyright infringement and constitutes the misuse of University academic materials or other assets. Receiving assignment solutions or answers to exam questions from an unauthorized source puts you at risk of receiving inaccurate information.&lt;/p&gt;
&lt;p&gt;Receiving assignment solutions or answers to exam questions from an unauthorized source puts you at risk of receiving inaccurate information.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Additional Examples of Contract Cheating:&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left;"&gt;Logging in as someone else Sharing your login credentials Sharing your anonymous ID Using someone else's anonymous ID Allowing someone else to log in as you Representing yourself as someone else Having someone else represent themselves as you&lt;/th&gt;
&lt;th style="text-align: left;"&gt;On other LUMS services and linked services: Zoom gmail Google Chat, Drive, ... Lab computers Wi-Fi ... On an external service, website, or app: repository hosting services: GitHub, GitHub Classroom, Bitbucket, GitLab, ... live quiz services: Mentimeter, ... Textbook websites/apps KnowledgeTree/MasteryGrids online tutorials online practice systems online homework systems&lt;/th&gt;
&lt;th style="text-align: left;"&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;Misrepresenting authorship to a version control system such as git:  &lt;/li&gt;
&lt;li&gt;Forging git commit metadata (author, time, etc.)  &lt;/li&gt;
&lt;li&gt;Creating git commits where the author recorded did not create the changes being committed.  &lt;/li&gt;
&lt;li&gt;...  &lt;/li&gt;
&lt;li&gt;Submitting participation exercises for someone else.  &lt;/li&gt;
&lt;li&gt;Representing yourself as someone else, or having someone else represent themselves as you to an instructor, TA, or other LUMS employee.  &lt;/li&gt;
&lt;li&gt;Attending a lecture/lab/seminar for someone else.  &lt;/li&gt;
&lt;li&gt;Having someone else attend a lecture/lab/seminar for you.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Appropriate Collaboration:&lt;/strong&gt;&lt;br&gt;
Students need to be able to recognize when they have crossed the line between appropriate collaboration and inappropriate collaboration. If students are unsure, they need to ask instructors to clarify what is allowed and what is not allowed.&lt;/p&gt;
&lt;p&gt;Here are some tips to avoid copying on assessments:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Do not write down something that you cannot explain to your instructor.  &lt;/li&gt;
&lt;li&gt;When you are helping other students, avoid showing them your work directly. Instead, explain your solution verbally. Allowing your work to be copied is also considered inappropriate collaboration.  &lt;/li&gt;
&lt;li&gt;It is also possible that verbally discussing the solution in too much detail may result in written responses that are too similar. Try to keep discussions at a general or higher level.  &lt;/li&gt;
&lt;li&gt;If you find yourself reading another student's solution, do not write anything down. Once you understand how to solve the problem, remove the other person's work from your sight and then write up the solution to the question yourself. Looking back and forth between someone else's paper and your own paper is almost certainly copying and considered inappropriate collaboration.  &lt;/li&gt;
&lt;li&gt;If the instructor or TA writes down part of a solution in order to help explain it to you or the class, you cannot copy it and hand it in for credit. Treat it the same way you would treat another student's work with respect to copying, that is, remove the explanation from your sight and then write up the solution yourself.  &lt;/li&gt;
&lt;li&gt;There is often more than one way to solve a problem. Choose the method that makes the most sense to you rather than the method that other students happen to use. If none of the ideas in your solution are your own, there is a good chance it will be flagged as copying.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For programming assignments, powerful software tools are used to detect plagiarism. When the software tools indicate that there is similarity between two submissions, the submissions are reviewed by the instructor or teaching assistant. If the possibility that the standards for academic honesty were violated is confirmed, an investigation is started. Eventually the submitted solutions may be forwarded to the Faculty of Science Associate Dean of Students for further investigation and eventual sanctions.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Each student must be able to verbally describe their exam answers and code, line by line, to a professor or TA, if asked to do so. Your mark may be reduced if you aren't able to explain your own work satisfactorily.  &lt;/li&gt;
&lt;li&gt;For some substantial programming assignments and homework questions, students may discuss the concepts covered by the assignment with other students registered in the course as long as they do not share actual solutions or programming code.  &lt;/li&gt;
&lt;li&gt;All suspected cases of plagiarism will be forwarded to the Dean's office and thoroughly investigated. Receiving a low mark for work not completed is a far superior alternative to this process and its possible long-term consequences for your career.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All suspected cases of plagiarism and other forms of cheating are immediately referred to the Disciplinary Committee. Please do not put yourself or us into such an unpleasant situation. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Citations:&lt;/strong&gt;&lt;br&gt;
If you include code or ideas from someone who isn't you (including from a Generative AI or LLM) you must cite it. Here are examples of an appropriate citation:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// The following function is from Microsoft, Copilot, &amp;quot;How do I write a merge sort in JavaScript?&amp;quot;, 2023-08-31&lt;/span&gt;

&lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mergeSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;array&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;To cite something written by an entity such as a real person you must include the name of the author, the name of the resource, directions to the resource (like a URL). &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;/*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;This&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;was&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;made&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gerald&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;gerald&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//example/libX/src/lib/X.c 2015 */&lt;/span&gt;

&lt;span class="n"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scrambleEggs&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Stackoverflow recommends you cite the author, the license, the title of the question, the url to the answer.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cm"&gt;/* &lt;/span&gt;
&lt;span class="cm"&gt;   Author: Felix Too https://stackoverflow.com/users/4083076/felix-too&lt;/span&gt;
&lt;span class="cm"&gt;   Title: &amp;quot;Failed to install the following Android SDK packages as some licences have not been accepted&amp;quot; error&lt;/span&gt;
&lt;span class="cm"&gt;   Answer: https://stackoverflow.com/a/55641042&lt;/span&gt;
&lt;span class="cm"&gt;   Date: 2019-04-11&lt;/span&gt;
&lt;span class="cm"&gt;   License: CC-BY-SA 4.0 (International)&lt;/span&gt;
&lt;span class="cm"&gt;*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Collaboration policy definitions:&lt;/strong&gt;&lt;br&gt;
The following are definitions for the different collaboration policies used in this course&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solo Effort:&lt;/strong&gt;&lt;br&gt;
Participation exercises fall under the department's &lt;em&gt;Solo Effort&lt;/em&gt; model unless announced by the instructor. &lt;em&gt;Solo Effort&lt;/em&gt; must be completed by the student registered in the course without external assistance from any individual or organization.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Students may only submit work authored by themselves.  &lt;/li&gt;
&lt;li&gt;Students &lt;strong&gt;may not&lt;/strong&gt; discuss or exchange solutions, steps, strategies, code, links, code, images, videos, output, comments, repositories, answers, etc.  &lt;/li&gt;
&lt;li&gt;Students &lt;strong&gt;may not&lt;/strong&gt; consult with other students on how to solve the problem, unlike the consultation model described below.  &lt;/li&gt;
&lt;li&gt;Students &lt;strong&gt;may not&lt;/strong&gt; submit a participation exercise, quiz, or exam without attending the relevant lecture, lab, seminar, or exam.  &lt;/li&gt;
&lt;li&gt;Students &lt;strong&gt;may not&lt;/strong&gt; share a participation exercise, quiz, or exam link (URL).  &lt;/li&gt;
&lt;li&gt;Students &lt;strong&gt;may not&lt;/strong&gt; represent themselves as someone else, (or have someone else represent themselves as the student) during lectures, labs, seminars, or exams.  &lt;/li&gt;
&lt;li&gt;Including in-person or over Zoom, or any other remote video, voice call, chat, or email service.  &lt;/li&gt;
&lt;li&gt;See Contract Cheating above.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Confidential:&lt;/strong&gt;&lt;br&gt;
Midterms and Final Exams are also &lt;em&gt;Confidential&lt;/em&gt; in addition to &lt;em&gt;Solo Effort&lt;/em&gt; as listed above.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Students &lt;strong&gt;may not&lt;/strong&gt; discuss the contents of the exam, except with instructors.  &lt;/li&gt;
&lt;li&gt;Students are not always able to take the exam at the same time, so do not discuss the contents of the exam even if you have already taken it!  &lt;/li&gt;
&lt;li&gt;No human, computer, electronic assistance is allowed of any sort, including AI chatbots, calculators, tutors, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Consultation:&lt;/strong&gt;&lt;br&gt;
Individual assignments and labs are under the department's Consultation model. That means you may discuss the labs with others, but you must create and submit a solution that is entirely your own work. If you consult with other students, you must list their names in a comment at the top of your submission or in your repository README, along with a brief description of the part(s) of the assignment you discussed.&lt;/p&gt;
&lt;p&gt;How to consult with other students without plagiarizing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Study the Course, Computing Science Department, CNAS, and University policies listed above regarding Academic Integrity.  &lt;/li&gt;
&lt;li&gt;All sources used must be cited.  &lt;/li&gt;
&lt;li&gt;If you use code snippets you must cite them, please see the examples above.  &lt;/li&gt;
&lt;li&gt;All sources of information used, e.g., books, websites, students you talked to etc., must be cited in your submitted file or repo README for each assignment.  &lt;/li&gt;
&lt;li&gt;If student A cites student B, then B should also cite A as consulted.  &lt;/li&gt;
&lt;li&gt;Individually develop your own solution for assignments and exercises. Submit only your own work for evaluation.  &lt;/li&gt;
&lt;li&gt;Each student is responsible for what is handed-in and must be able to explain it.  &lt;/li&gt;
&lt;li&gt;Students may only submit work authored by themselves. Work submitted by a student that is the work of someone else (e.g. another student or a tutor) either in part or in entirety is considered plagiarism.  &lt;/li&gt;
&lt;li&gt;You can freely discuss the steps and solutions with your classmates on a conceptual verbal level.  &lt;/li&gt;
&lt;li&gt;Limit discussion to be among students taking the current course, not students who took in earlier terms or other students. Consultation is a two-way process that benefits both sides.  &lt;/li&gt;
&lt;li&gt;Do not exchange any text, code, images, videos, output, comments, repositories, or detailed (low-level) step-by-step procedures.  &lt;/li&gt;
&lt;li&gt;Do not share solutions.  &lt;/li&gt;
&lt;li&gt;Do not give other students access to your solutions and do not seek access to other's solutions. This is considered plagiarism.  &lt;/li&gt;
&lt;li&gt;Do not show your code to classmates.  &lt;/li&gt;
&lt;li&gt;Do not look at a classmate's code.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Examples of consultation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Acceptable consultation example:  &lt;/li&gt;
&lt;li&gt;Student A has a problem with the code  &lt;/li&gt;
&lt;li&gt;Student A asks Student B for help  &lt;/li&gt;
&lt;li&gt;Student B explains the steps, concepts, or techniques they used to get their code working  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Student A understands the fix&lt;/strong&gt;  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Student A can reproduce and explain the fix.&lt;/strong&gt;  &lt;/li&gt;
&lt;li&gt;Student A submits the code  &lt;/li&gt;
&lt;li&gt;Acceptable consultation example:  &lt;/li&gt;
&lt;li&gt;Student A needs to make a grid for a board game program.  &lt;/li&gt;
&lt;li&gt;Student A asks Student B for help.  &lt;/li&gt;
&lt;li&gt;Student B explains that they "used two nested for loops, one for the vertical and one for the horizontal."  &lt;/li&gt;
&lt;li&gt;Student A implements two nested for loops using their own unique code.  &lt;/li&gt;
&lt;li&gt;Student A can use the for loops to fix similar problems, and they &lt;strong&gt;can explain why each piece of code is needed, along with how it works to solve the problem&lt;/strong&gt;.  &lt;/li&gt;
&lt;li&gt;Student A submits the code  &lt;/li&gt;
&lt;li&gt;Unacceptable consultation example:  &lt;/li&gt;
&lt;li&gt;Student A needs to make a grid for a board game program.  &lt;/li&gt;
&lt;li&gt;Student A asks Student B for help.  &lt;/li&gt;
&lt;li&gt;Student B sends the code they used to make the board game grid for their solution.  &lt;/li&gt;
&lt;li&gt;Student A copies Student B's code into their own solution, changing it a little.  &lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Student A submits the code&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unacceptable plagiarism example:  &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Student A has a problem with the code  &lt;/li&gt;
&lt;li&gt;Student A asks Student B for help  &lt;/li&gt;
&lt;li&gt;Student B provides Student A with the code  &lt;/li&gt;
&lt;li&gt;Student A submits the code&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Teamwork:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;As long as you are a part of a group, you are responsible for everything in the group project, whether you participated in every component or not.  &lt;/li&gt;
&lt;li&gt;A group may only submit work authored by group members or appropriately cited and credited code that does not violate the author's license.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Intellectual Violence:&lt;/strong&gt;&lt;br&gt;
In this course, Intellectual Violence is considered bullying. Intellectual violence is when one teammate uses their skill, knowledge, or experience, to intimidate or control the other teammate(s) rather than sharing and helping them learn. Examples of Intellectual Violence&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Using complex terminology or concepts to make others feel inferior.  &lt;/li&gt;
&lt;li&gt;Dismissing or ridiculing colleagues’ ideas or contributions.  &lt;/li&gt;
&lt;li&gt;Withholding information to maintain a power imbalance.  &lt;/li&gt;
&lt;li&gt;Creating an environment where only certain knowledge or skills are valued.  &lt;/li&gt;
&lt;li&gt;Rejecting contributions without constructive feedback.  &lt;/li&gt;
&lt;li&gt;Imposing overly strict code standards.  &lt;/li&gt;
&lt;li&gt;Ignoring or delaying code reviews, pull requests, or commits.  &lt;/li&gt;
&lt;li&gt;Favouring contributions from certain team members.  &lt;/li&gt;
&lt;li&gt;Using harsh or condescending language in comments, code reviews, pull requests, issues, commit messages, etc.  &lt;/li&gt;
&lt;li&gt;Making contributors feel unwelcome.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Exam Conduct:&lt;/strong&gt;   &lt;/p&gt;
&lt;p&gt;Some key points to be aware of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Your student photo ID is required at exams to verify your identity.  &lt;/li&gt;
&lt;li&gt;Students must arrive at the specified time to take the exam. Once the exam has started, students must remain in the physical in-person or remote environment for at least 30 minutes. Students who arrive more than 30 minutes late for an in-person exam will not be permitted to take the exam. Students who arrive more than 30 minutes late for an online exam may have their exam attempt removed or disqualified by the instructor. In both cases, students may apply for a deferred examination.  &lt;/li&gt;
&lt;li&gt;All cell phones must be turned off and stored in your bags.&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- **Accommodations for Students:**  
In accordance with the University of Alberta’s [Discrimination, Harassment, and Duty to Accommodate policy](https://www.ualberta.ca/en/alfresco/uappol/humanresources/discrimination-harassment-and-duty-to-accommodate/policy/discrimination-harassment-and-duty-to-accommodate-policy.pdf), accommodation support is available to eligible students who encounter limitations or restrictions to their ability to perform the daily activities necessary to pursue studies at a post-secondary level due to medical conditions and/or non-medical protected grounds. Accommodations are coordinated through the [Academic Success Centre](https://www.ualberta.ca/current-students/academic-success-centre/index.html), and students can learn more about eligibility on the [Register for Accommodations website](https://www.ualberta.ca/en/current-students/academic-success-centre/accessibility-resources/register/index.html). 

It is recommended that students apply ***AS SOON AS POSSIBLE*** in order to ensure sufficient time to complete accommodation registration and coordination. Students are advised to review and adhere to published deadlines for accommodation approval and for specific accommodation requests (e.g., exam registration submission deadlines). Students who request accommodations less than a month in advance of the academic term for which they require accommodations may experience unavoidable delays or consequences in their academic programs, and may need to consider alternative academic schedules. --&gt;

&lt;p&gt;&lt;strong&gt;Recording and/or Distribution of Course Materials:&lt;/strong&gt;&lt;br&gt;
Audio or video recording, digital or otherwise, of lectures, labs, seminars or any other teaching environment by students is allowed only with the prior written consent of the instructor or as a part of an approved accommodation plan. Student or instructor content, digital or otherwise, created and/or used within the context of the course is to be used solely for personal study, and is not to be used or distributed for any other purpose without prior written consent from the content authors.  &lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; &lt;br&gt;
Any typographical errors in this syllabus are subject to change and will be announced in class and/or posted on the course website. The date of final examinations is set by the Registrar and takes precedence over the final examination date reported in the syllabus.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Copyright&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dr. Abdul Ali Bangash, Department of Computer Science, Lahore University of Management Sciences (LUMS)(2025).&lt;/li&gt;
&lt;li&gt;Dr. Suleman Shahid, Department of Computer Science, Lahore University of Management Sciences (LUMS)(2025). &lt;/li&gt;
&lt;/ul&gt;</content><category term="general"/><category term="outline"/><category term="policy"/><category term="grading"/><category term="contact"/></entry><entry><title>Midterms</title><link href="https://lums-cs360-web.github.io/lums-cs360/general/midterms.html" rel="alternate"/><published>2025-09-09T00:00:00+05:00</published><updated>2025-09-09T00:00:00+05:00</updated><author><name>LUMS</name></author><id>tag:lums-cs360-web.github.io,2025-09-09:/lums-cs360/general/midterms.html</id><summary type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019.
copied from: Dr Abrahm Hindle (CMPUT301 - University of Alberta)
status: published
summary: Exam Practice Questions&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;The Midterm Exams consist of two exams, each with multiple questions,
taking about 10-20 minutes each. &lt;/p&gt;
&lt;p&gt;The midterm exams are closed book/closed notes. No collaboration
is allowed. Solo and Confidential.No cheat sheet is allowed.&lt;/p&gt;
&lt;h4 id="2026-times"&gt;2026 Times&lt;/h4&gt;
&lt;p&gt;1.5 hr exams:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Midterm 1&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;March 12, 2026 &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Midterm 2&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;April 23, 2026 &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="topics"&gt;Topics&lt;/h5&gt;
&lt;p&gt;The exam topics involve everything covered or presented in class up until the
day of the midterm exam.&lt;/p&gt;
&lt;p&gt;The exam questions are very similar to our in class exercises.&lt;/p&gt;
&lt;h3 id="exam-practice"&gt;Exam Practice&lt;/h3&gt;
&lt;p&gt;Later exams are more directly relevant to your midterms. Answers will
not be provided, but you can post your answers for correction in the
discussion forum on slack.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/PracticeQuestions.pdf"&gt;PQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/Final-2015-Winter.pdf"&gt;W15HFQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/Midterm8.pdf"&gt;F15HMQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/Final-2015-Fall.pdf"&gt;F15HFQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/Midterm9-2016-Fall.pdf"&gt;F16HMQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/Final-2016-Fall.pdf"&gt;F16HFQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/Midterm10-2018-Fall.pdf"&gt;F18HMQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/Final-2018-Fall.pdf"&gt;F18HFQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/Midterm11-2020-Winter.pdf"&gt;W20HMQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/CMPUT301W20B_EB1_Final.pdf"&gt;W20HFQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/CMPUT301-Winter-2021-Midterm.pdf"&gt;W21HM1Q&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/CMPUT301-Winter-2021-Midterm2.pdf"&gt;W21HM2Q&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/CMPUT301-Winter-2021-Midterm3.pdf"&gt;W21HM3Q&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/CMPUT301W22Midterm1.pdf"&gt;W22M1Q&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/CMPUT301W22Midterm2.pdf"&gt;W22M2Q&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/CMPUT301W22Midterm3.pdf"&gt;W22M3Q&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/f22pmq.pdf"&gt;F22PMQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/f22pma.pdf"&gt;F22PMA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/f22pfq.pdf"&gt;F22PFQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/f22pfa.pdf"&gt;F22PFA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/f22pf2q.pdf"&gt;F22PF2Q&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/f22pf2a.pdf"&gt;F22PF2A&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am1q1.html"&gt;W23AM1Q1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am1q2.html"&gt;W23AM1Q2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am1q3.html"&gt;W23AM1Q3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am2q1.html"&gt;W23AM2Q1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am2q2.html"&gt;W23AM2Q2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am2q3.html"&gt;W23AM2Q3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am3q1.html"&gt;W23AM3Q1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am3q2.html"&gt;W23AM3Q2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am3q3.html"&gt;W23AM3Q3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hm1q1.html"&gt;W23HM1Q1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hm1q2.html"&gt;W23HM1Q2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hm1q3.html"&gt;W23HM1Q3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hm2q1.html"&gt;W23HM2Q1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hm2q2.html"&gt;W23HM2Q2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hm2q3.html"&gt;W23HM2Q3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hm3q1.html"&gt;W23HM3Q1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hm3q2.html"&gt;W23HM3Q2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hm3q3.html"&gt;W23HM3Q3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hpmq1.html"&gt;W23HPMQ1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hm1a.html"&gt;W23HM1A&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="general"/><category term="resources"/><category term="reading"/><category term="references"/><category term="videos"/><category term="practice"/><category term="exams"/></entry><entry><title>Assignment 1</title><link href="https://lums-cs360-web.github.io/lums-cs360/individual/assignment1.html" rel="alternate"/><published>2025-09-02T00:00:00+05:00</published><updated>2025-09-02T00:00:00+05:00</updated><author><name>LUMS</name></author><id>tag:lums-cs360-web.github.io,2025-09-02:/lums-cs360/individual/assignment1.html</id><summary type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019.
status: published
summary: Assignment 1&lt;/p&gt;
&lt;hr&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#assignment-emotilog-a-quick-emotion-logging-app"&gt;Assignment: EmotiLog - A Quick Emotion Logging App&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#learning-objectives"&gt;Learning Objectives:&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#problem-description"&gt;Problem Description:&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Due date:&lt;/strong&gt; Check the &lt;a href="https://lums-cs360-web.github.io/lums-cs360/#schedule"&gt;schedule&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="assignment-emotilog-a-quick-emotion-logging-app"&gt;Assignment: EmotiLog - A Quick Emotion Logging App&lt;/h5&gt;
&lt;h3 id="learning-objectives"&gt;&lt;strong&gt;Learning Objectives:&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Create a simple, interactive mobile application using Android and
    Java.&lt;/li&gt;
&lt;li&gt;Document an object-oriented design using Unified Modeling Language
    (UML).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="problem-description"&gt;&lt;strong&gt;Problem Description:&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Develop an Android app called &lt;strong&gt;ROLLNUM-EmotiLog&lt;/strong&gt; (e.g.,
25100052-EmotiLog) that allows users to quickly log their feelings or
significant events by pressing emoticon buttons. The app should enable
users to easily record each selected emoticon along with the
corresponding timestamp, and then provide a summary of logs by frequency
over a specified period.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Preset Emoticon Buttons:&lt;/strong&gt; 6 to 9 customizable emoticon
    buttons representing different feelings or events (e.g., Happy,
    Sad, Grateful, Angry, Excited, etc.).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Logging Functionality:&lt;/strong&gt; Each button press records the
    selected emoticon and the current timestamp.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Daily Summary:&lt;/strong&gt; Users can view a summary of logged emoticons
    for each day, including total counts and frequencies.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User-Friendly Interface:&lt;/strong&gt; The app must provide a simple and
    attractive user interface to enhance ease of use.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Deliverables:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Code Base:&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;Complete Android Studio project and compiled APK.&lt;/li&gt;
&lt;li&gt;Each class must be properly commented to describe its
    purpose, design rationale, and any outstanding issues.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Video:&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;A demonstration video (max 3 minutes) showing the app\'s
    core functionalities without audio. It should illustrate how
    to log emoticons and view summaries.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;System Documentation:&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;UML class diagram(s) detailing the app\'s object-oriented
    design. Include notes on each class\'s main
    responsibilities.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Demonstration Actions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open the app from the launcher.&lt;/li&gt;
&lt;li&gt;Show the main screen with emoticon buttons.&lt;/li&gt;
&lt;li&gt;Press an emoticon button (e.g., Happy)&lt;/li&gt;
&lt;li&gt;Navigate to the list of emoticon events and confirm that it logs
    the selected emoticons with the timestamp.&lt;/li&gt;
&lt;li&gt;Return to main screen with emoticon buttons.&lt;/li&gt;
&lt;li&gt;Press 1 emotion 10 times in rapid succession.&lt;/li&gt;
&lt;li&gt;Navigate to the list of emoticon events and confirm that it logs
    the selected emoticons with the timestamp.&lt;/li&gt;
&lt;li&gt;Return to the main screen.&lt;/li&gt;
&lt;li&gt;Press 1 emotion 5 times in rapid succession.&lt;/li&gt;
&lt;li&gt;Go to the summary screen and show the emoticon counts.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hints&lt;/p&gt;
&lt;p&gt;This is a description of the core functionality. Often, problem
statements from users lack details. As you are prototyping a design,
you may uncover other behaviors that have not been specified, but
make sense in the context and intent of the application. For
example, think about how someone might effectively use your
application. It is up to you to decide what functions your design
will need, based on the given problem description and valid
assumptions, in discussion with your users (the TAs and instructor).
You should consider asking the customer (the instructor) what they
want to see. While you may discuss your design with other students,
the code and documentation must be your own work.&lt;/p&gt;
&lt;p&gt;Code from publicly available sources may be used within reason and
only if their licenses permit so. Always fully cite to give proper
credit to the original developers in the source code and in the
system documentation. For example, in citing a work, at least state:
from whom, the date of publication, license, and URL. Do what is
required by its license.&lt;/p&gt;
&lt;p&gt;The TAs will be inspecting your code, so \"major\" commented-out
experiments should be cleaned up so that the code is readable.&lt;/p&gt;
&lt;p&gt;Do not skimp on the UML class diagrams in the system documentation.
For neatness and readability, diagrams should be created or drawn
using a vector graphics editing tool and exported in a common,
non-lossy graphics format.&lt;/p&gt;
&lt;p&gt;Besides addressing the problem correctly, your software design will
be evaluated on its proper use of object-oriented design concepts,
such as separation of concerns and information hiding.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Losing Marks&lt;/p&gt;
&lt;p&gt;You may lose marks for any of the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;files not in properly named subdirectories&lt;/li&gt;
&lt;li&gt;missing compiled binary APK file for the app&lt;/li&gt;
&lt;li&gt;cannot run the app after install&lt;/li&gt;
&lt;li&gt;cannot distinguish CCID from the app name&lt;/li&gt;
&lt;li&gt;cannot view files without specialized tools&lt;/li&gt;
&lt;li&gt;lossy compression used in image file(s) for UML (e.g., JPEG)&lt;/li&gt;
&lt;li&gt;inadequate or improper citations&lt;/li&gt;
&lt;li&gt;using RAR archive format&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are brown M&amp;amp;M rules.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Submission Procedure:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create a directory named &lt;strong&gt;ROLLNUM-EmotiLog&lt;/strong&gt; (e.g.,
    kennyw-EmotiLog) and include the following subdirectories:
    &lt;strong&gt;code&lt;/strong&gt;, &lt;strong&gt;video&lt;/strong&gt;, &lt;strong&gt;doc&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Place the Android Studio project in the &lt;strong&gt;code&lt;/strong&gt; directory.&lt;/li&gt;
&lt;li&gt;Include the APK file under
    &lt;strong&gt;code/app/build/outputs/apk/debug/app-debug.apk&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Store the demonstration video in the &lt;strong&gt;video&lt;/strong&gt; directory.&lt;/li&gt;
&lt;li&gt;Keep UML documentation in the &lt;strong&gt;doc&lt;/strong&gt; directory.&lt;/li&gt;
&lt;li&gt;Zip the &lt;strong&gt;ROLLNUM-EmotiLog&lt;/strong&gt; directory and upload.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Evaluation Criteria:&lt;/p&gt;
&lt;p&gt;The submission will be assessed according to the following
categories:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Excellent (8):&lt;/strong&gt; Functionality meets all requirements,
    intuitive UI, comprehensive UML, and a clear video
    demonstration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Good (7):&lt;/strong&gt; Minor issues but overall functional and follows
    submission rules.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Satisfactory (5):&lt;/strong&gt; Runs, but noticeable issues; some
    requirements may be missing; UML is present but may be
    incomplete.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unsatisfactory (4):&lt;/strong&gt; Significant issues affecting
    functionality or missing requirements.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Failure (0):&lt;/strong&gt; Incomplete submissions or missing vital
    components such as Videos, UML, or code.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Excellent (8):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The app is fully functional, meeting all the specified
    requirements.&lt;/li&gt;
&lt;li&gt;The user interface is intuitive, attractive, and responsive.&lt;/li&gt;
&lt;li&gt;The app follows the brown M&amp;amp;M rules.&lt;/li&gt;
&lt;li&gt;The UML documentation is comprehensive and accurately represents
    the object-oriented design.&lt;/li&gt;
&lt;li&gt;The video demonstration clearly showcases all required actions,
    and the app performs flawlessly in the demo.&lt;/li&gt;
&lt;li&gt;Must have a Video&lt;/li&gt;
&lt;li&gt;Must have UML&lt;/li&gt;
&lt;li&gt;Must Have Codebase&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Good (7):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The app runs and performs the expected functionalities.&lt;/li&gt;
&lt;li&gt;Minor issues may be present, such as a small bug or a slight
    deviation from the requirements.&lt;/li&gt;
&lt;li&gt;The user interface is satisfactory but may have some room for
    improvement.&lt;/li&gt;
&lt;li&gt;The app follows the brown M&amp;amp;M rules.&lt;/li&gt;
&lt;li&gt;The UML documentation is mostly complete but may have minor
    omissions.&lt;/li&gt;
&lt;li&gt;Must have a Video&lt;/li&gt;
&lt;li&gt;Must have UML&lt;/li&gt;
&lt;li&gt;Must Have Codebase&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Satisfactory (5):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The app runs, but there are noticeable issues affecting its
    stability or functionality.&lt;/li&gt;
&lt;li&gt;Some requirements may be missing or not fully implemented.&lt;/li&gt;
&lt;li&gt;The user interface is functional but may lack polish or suffer
    from usability issues.&lt;/li&gt;
&lt;li&gt;The app may not fully adhere to the brown M&amp;amp;M rules.&lt;/li&gt;
&lt;li&gt;The UML documentation is present but may be incomplete or
    inaccurate.&lt;/li&gt;
&lt;li&gt;Must have a Video&lt;/li&gt;
&lt;li&gt;Must have UML&lt;/li&gt;
&lt;li&gt;Must Have Codebase&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Unsatisfactory (4):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Effort has been put into the assignment, but the app may not run
    well or may have significant functionality issues.&lt;/li&gt;
&lt;li&gt;Several requirements are missing or not implemented.&lt;/li&gt;
&lt;li&gt;The user interface may be confusing or challenging to use.&lt;/li&gt;
&lt;li&gt;The app may not follow the brown M&amp;amp;M rules.&lt;/li&gt;
&lt;li&gt;The UML documentation lacks essential components, incomplete,
    inaccuate.&lt;/li&gt;
&lt;li&gt;Must have a Video&lt;/li&gt;
&lt;li&gt;Must have UML&lt;/li&gt;
&lt;li&gt;Must Have Codebase&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Failure (0):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The assignment is incomplete, lacking essential components such
    as UML documentation, video demonstration, or code.&lt;/li&gt;
&lt;li&gt;No submission is provided.&lt;/li&gt;
&lt;li&gt;Could be missing any one of these: Video, UML, Codebase&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;</content><category term="individual"/><category term="individual"/><category term="policy"/><category term="grading"/></entry><entry><title>Assignment 1</title><link href="https://lums-cs360-web.github.io/lums-cs360/individual/assignment1.html" rel="alternate"/><published>2025-09-02T00:00:00+05:00</published><updated>2025-09-02T00:00:00+05:00</updated><author><name>LUMS</name></author><id>tag:lums-cs360-web.github.io,2025-09-02:/lums-cs360/individual/assignment1.html</id><summary type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019.
status: published
summary: Assignment 1&lt;/p&gt;
&lt;hr&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#assignment-emotilog-a-quick-emotion-logging-app"&gt;Assignment: EmotiLog - A Quick Emotion Logging App&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#learning-objectives"&gt;Learning Objectives:&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#problem-description"&gt;Problem Description:&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Due date:&lt;/strong&gt; Check the &lt;a href="https://lums-cs360-web.github.io/lums-cs360/#schedule"&gt;schedule&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="assignment-emotilog-a-quick-emotion-logging-app"&gt;Assignment: EmotiLog - A Quick Emotion Logging App&lt;/h5&gt;
&lt;h3 id="learning-objectives"&gt;&lt;strong&gt;Learning Objectives:&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Create a simple, interactive mobile application using Android and
    Java.&lt;/li&gt;
&lt;li&gt;Document an object-oriented design using Unified Modeling Language
    (UML).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="problem-description"&gt;&lt;strong&gt;Problem Description:&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Develop an Android app called &lt;strong&gt;ROLLNUM-EmotiLog&lt;/strong&gt; (e.g.,
25100052-EmotiLog) that allows users to quickly log their feelings or
significant events by pressing emoticon buttons. The app should enable
users to easily record each selected emoticon along with the
corresponding timestamp, and then provide a summary of logs by frequency
over a specified period.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Preset Emoticon Buttons:&lt;/strong&gt; 6 to 9 customizable emoticon
    buttons representing different feelings or events (e.g., Happy,
    Sad, Grateful, Angry, Excited, etc.).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Logging Functionality:&lt;/strong&gt; Each button press records the
    selected emoticon and the current timestamp.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Daily Summary:&lt;/strong&gt; Users can view a summary of logged emoticons
    for each day, including total counts and frequencies.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User-Friendly Interface:&lt;/strong&gt; The app must provide a simple and
    attractive user interface to enhance ease of use.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Deliverables:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Code Base:&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;Complete Android Studio project and compiled APK.&lt;/li&gt;
&lt;li&gt;Each class must be properly commented to describe its
    purpose, design rationale, and any outstanding issues.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Video:&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;A demonstration video (max 3 minutes) showing the app\'s
    core functionalities without audio. It should illustrate how
    to log emoticons and view summaries.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;System Documentation:&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;UML class diagram(s) detailing the app\'s object-oriented
    design. Include notes on each class\'s main
    responsibilities.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Demonstration Actions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open the app from the launcher.&lt;/li&gt;
&lt;li&gt;Show the main screen with emoticon buttons.&lt;/li&gt;
&lt;li&gt;Press an emoticon button (e.g., Happy)&lt;/li&gt;
&lt;li&gt;Navigate to the list of emoticon events and confirm that it logs
    the selected emoticons with the timestamp.&lt;/li&gt;
&lt;li&gt;Return to main screen with emoticon buttons.&lt;/li&gt;
&lt;li&gt;Press 1 emotion 10 times in rapid succession.&lt;/li&gt;
&lt;li&gt;Navigate to the list of emoticon events and confirm that it logs
    the selected emoticons with the timestamp.&lt;/li&gt;
&lt;li&gt;Return to the main screen.&lt;/li&gt;
&lt;li&gt;Press 1 emotion 5 times in rapid succession.&lt;/li&gt;
&lt;li&gt;Go to the summary screen and show the emoticon counts.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hints&lt;/p&gt;
&lt;p&gt;This is a description of the core functionality. Often, problem
statements from users lack details. As you are prototyping a design,
you may uncover other behaviors that have not been specified, but
make sense in the context and intent of the application. For
example, think about how someone might effectively use your
application. It is up to you to decide what functions your design
will need, based on the given problem description and valid
assumptions, in discussion with your users (the TAs and instructor).
You should consider asking the customer (the instructor) what they
want to see. While you may discuss your design with other students,
the code and documentation must be your own work.&lt;/p&gt;
&lt;p&gt;Code from publicly available sources may be used within reason and
only if their licenses permit so. Always fully cite to give proper
credit to the original developers in the source code and in the
system documentation. For example, in citing a work, at least state:
from whom, the date of publication, license, and URL. Do what is
required by its license.&lt;/p&gt;
&lt;p&gt;The TAs will be inspecting your code, so \"major\" commented-out
experiments should be cleaned up so that the code is readable.&lt;/p&gt;
&lt;p&gt;Do not skimp on the UML class diagrams in the system documentation.
For neatness and readability, diagrams should be created or drawn
using a vector graphics editing tool and exported in a common,
non-lossy graphics format.&lt;/p&gt;
&lt;p&gt;Besides addressing the problem correctly, your software design will
be evaluated on its proper use of object-oriented design concepts,
such as separation of concerns and information hiding.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Losing Marks&lt;/p&gt;
&lt;p&gt;You may lose marks for any of the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;files not in properly named subdirectories&lt;/li&gt;
&lt;li&gt;missing compiled binary APK file for the app&lt;/li&gt;
&lt;li&gt;cannot run the app after install&lt;/li&gt;
&lt;li&gt;cannot distinguish CCID from the app name&lt;/li&gt;
&lt;li&gt;cannot view files without specialized tools&lt;/li&gt;
&lt;li&gt;lossy compression used in image file(s) for UML (e.g., JPEG)&lt;/li&gt;
&lt;li&gt;inadequate or improper citations&lt;/li&gt;
&lt;li&gt;using RAR archive format&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are brown M&amp;amp;M rules.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Submission Procedure:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create a directory named &lt;strong&gt;ROLLNUM-EmotiLog&lt;/strong&gt; (e.g.,
    kennyw-EmotiLog) and include the following subdirectories:
    &lt;strong&gt;code&lt;/strong&gt;, &lt;strong&gt;video&lt;/strong&gt;, &lt;strong&gt;doc&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Place the Android Studio project in the &lt;strong&gt;code&lt;/strong&gt; directory.&lt;/li&gt;
&lt;li&gt;Include the APK file under
    &lt;strong&gt;code/app/build/outputs/apk/debug/app-debug.apk&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Store the demonstration video in the &lt;strong&gt;video&lt;/strong&gt; directory.&lt;/li&gt;
&lt;li&gt;Keep UML documentation in the &lt;strong&gt;doc&lt;/strong&gt; directory.&lt;/li&gt;
&lt;li&gt;Zip the &lt;strong&gt;ROLLNUM-EmotiLog&lt;/strong&gt; directory and upload.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Evaluation Criteria:&lt;/p&gt;
&lt;p&gt;The submission will be assessed according to the following
categories:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Excellent (8):&lt;/strong&gt; Functionality meets all requirements,
    intuitive UI, comprehensive UML, and a clear video
    demonstration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Good (7):&lt;/strong&gt; Minor issues but overall functional and follows
    submission rules.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Satisfactory (5):&lt;/strong&gt; Runs, but noticeable issues; some
    requirements may be missing; UML is present but may be
    incomplete.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unsatisfactory (4):&lt;/strong&gt; Significant issues affecting
    functionality or missing requirements.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Failure (0):&lt;/strong&gt; Incomplete submissions or missing vital
    components such as Videos, UML, or code.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Excellent (8):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The app is fully functional, meeting all the specified
    requirements.&lt;/li&gt;
&lt;li&gt;The user interface is intuitive, attractive, and responsive.&lt;/li&gt;
&lt;li&gt;The app follows the brown M&amp;amp;M rules.&lt;/li&gt;
&lt;li&gt;The UML documentation is comprehensive and accurately represents
    the object-oriented design.&lt;/li&gt;
&lt;li&gt;The video demonstration clearly showcases all required actions,
    and the app performs flawlessly in the demo.&lt;/li&gt;
&lt;li&gt;Must have a Video&lt;/li&gt;
&lt;li&gt;Must have UML&lt;/li&gt;
&lt;li&gt;Must Have Codebase&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Good (7):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The app runs and performs the expected functionalities.&lt;/li&gt;
&lt;li&gt;Minor issues may be present, such as a small bug or a slight
    deviation from the requirements.&lt;/li&gt;
&lt;li&gt;The user interface is satisfactory but may have some room for
    improvement.&lt;/li&gt;
&lt;li&gt;The app follows the brown M&amp;amp;M rules.&lt;/li&gt;
&lt;li&gt;The UML documentation is mostly complete but may have minor
    omissions.&lt;/li&gt;
&lt;li&gt;Must have a Video&lt;/li&gt;
&lt;li&gt;Must have UML&lt;/li&gt;
&lt;li&gt;Must Have Codebase&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Satisfactory (5):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The app runs, but there are noticeable issues affecting its
    stability or functionality.&lt;/li&gt;
&lt;li&gt;Some requirements may be missing or not fully implemented.&lt;/li&gt;
&lt;li&gt;The user interface is functional but may lack polish or suffer
    from usability issues.&lt;/li&gt;
&lt;li&gt;The app may not fully adhere to the brown M&amp;amp;M rules.&lt;/li&gt;
&lt;li&gt;The UML documentation is present but may be incomplete or
    inaccurate.&lt;/li&gt;
&lt;li&gt;Must have a Video&lt;/li&gt;
&lt;li&gt;Must have UML&lt;/li&gt;
&lt;li&gt;Must Have Codebase&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Unsatisfactory (4):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Effort has been put into the assignment, but the app may not run
    well or may have significant functionality issues.&lt;/li&gt;
&lt;li&gt;Several requirements are missing or not implemented.&lt;/li&gt;
&lt;li&gt;The user interface may be confusing or challenging to use.&lt;/li&gt;
&lt;li&gt;The app may not follow the brown M&amp;amp;M rules.&lt;/li&gt;
&lt;li&gt;The UML documentation lacks essential components, incomplete,
    inaccuate.&lt;/li&gt;
&lt;li&gt;Must have a Video&lt;/li&gt;
&lt;li&gt;Must have UML&lt;/li&gt;
&lt;li&gt;Must Have Codebase&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Failure (0):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The assignment is incomplete, lacking essential components such
    as UML documentation, video demonstration, or code.&lt;/li&gt;
&lt;li&gt;No submission is provided.&lt;/li&gt;
&lt;li&gt;Could be missing any one of these: Video, UML, Codebase&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;</content><category term="individual"/><category term="individual"/><category term="policy"/><category term="grading"/></entry><entry><title>Project Part 1</title><link href="https://lums-cs360-web.github.io/lums-cs360/projects/project_part1.html" rel="alternate"/><published>2025-08-28T00:00:00+05:00</published><updated>2025-08-28T00:00:00+05:00</updated><author><name>LUMS</name></author><id>tag:lums-cs360-web.github.io,2025-08-28:/lums-cs360/projects/project_part1.html</id><summary type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019.
status: published
summary: Project Part 1&lt;/p&gt;
&lt;hr&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#learning-objectives"&gt;Learning Objectives&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#exercise"&gt;Exercise&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#submission-procedure"&gt;Submission Procedure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#hints"&gt;Hints&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Due date:&lt;/strong&gt; Check the &lt;a href="https://lums-cs360-web.github.io/lums-cs360/#schedule"&gt;schedule&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="learning-objectives"&gt;Learning Objectives&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Set up and use collaborative tools for team-based project development.&lt;/li&gt;
&lt;li&gt;Collaborate in a team.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="exercise"&gt;Exercise&lt;/h3&gt;
&lt;p&gt;Your team is expected to use GitHub for a git repository and wiki to share, manage, and store your project artifacts.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;See the Project Teams sheet for your assigned team name, Example: &lt;code&gt;indigo&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Add CS360S26 to it. Example &lt;code&gt;CS360S26indigo&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;Create a new GitHub Organization using the following naming format: CS360S26teamname e.g.&lt;code&gt;CS360S26indigo&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;This must be the exact name of your team’s GitHub organization. Use the free GitHub plan.&lt;/li&gt;
&lt;li&gt;Inside your newly created organization, create one public repository. The repository name must be a professional, respectful project name related to your team name. Example: &lt;code&gt;indigo-events&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;Make sure your repository is accessible at all times to team members, the TAs, and the instructor via GitHub. Record the repo URL.&lt;/li&gt;
&lt;li&gt;Create a doc/ directory in your repository, create a team.txt file within doc/, and have each of your team members make a distinct, versioned edit to that file. For each member, that edit must be a line with their GitHub username.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;(Later in the course, project documentation will be done using the GitHub wiki.)&lt;/p&gt;
&lt;h3 id="submission-procedure"&gt;&lt;strong&gt;Submission Procedure&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;One team member uses &lt;a href="https://forms.gle/PjF3QbLpCSmm3dSy7"&gt;the Google form&lt;/a&gt; to submit project part 1.&lt;/p&gt;
&lt;h3 id="hints"&gt;&lt;strong&gt;Hints&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;This exercise can be completed with your team in the labs that cover git and GitHub.&lt;/p&gt;</content><category term="projects"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>Project Problem Description</title><link href="https://lums-cs360-web.github.io/lums-cs360/projects/project_problem_descr.html" rel="alternate"/><published>2025-08-26T00:00:00+05:00</published><updated>2025-08-26T00:00:00+05:00</updated><author><name>LUMS</name></author><id>tag:lums-cs360-web.github.io,2025-08-26:/lums-cs360/projects/project_problem_descr.html</id><summary type="html">&lt;ul&gt;
&lt;li&gt;Dr Abdul Ali Bangash&lt;/li&gt;
&lt;li&gt;Dr Suleman Shahid
status: published
summary: Project Problem Description&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#project-problem-description"&gt;Project Problem Description&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#project-1-campus-event-discovery-and-management-platform"&gt;Project 1: Campus Event Discovery and Management Platform&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#core-features"&gt;Core Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#primary-users"&gt;Primary Users&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#key-challenges"&gt;Key Challenges&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#project-2-peer-tutoring-marketplace"&gt;Project 2: Peer Tutoring Marketplace&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#core-features_1"&gt;Core Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#primary-users_1"&gt;Primary Users&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#key-challenges_1"&gt;Key Challenges&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#project-3-campus-sustainability-tracker"&gt;Project 3: Campus Sustainability Tracker&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#core-features_2"&gt;Core Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#primary-users_2"&gt;Primary Users …&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</summary><content type="html">&lt;ul&gt;
&lt;li&gt;Dr Abdul Ali Bangash&lt;/li&gt;
&lt;li&gt;Dr Suleman Shahid
status: published
summary: Project Problem Description&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#project-problem-description"&gt;Project Problem Description&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#project-1-campus-event-discovery-and-management-platform"&gt;Project 1: Campus Event Discovery and Management Platform&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#core-features"&gt;Core Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#primary-users"&gt;Primary Users&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#key-challenges"&gt;Key Challenges&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#project-2-peer-tutoring-marketplace"&gt;Project 2: Peer Tutoring Marketplace&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#core-features_1"&gt;Core Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#primary-users_1"&gt;Primary Users&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#key-challenges_1"&gt;Key Challenges&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#project-3-campus-sustainability-tracker"&gt;Project 3: Campus Sustainability Tracker&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#core-features_2"&gt;Core Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#primary-users_2"&gt;Primary Users&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#key-challenges_2"&gt;Key Challenges&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#project-4-campus-gate-access-system"&gt;Project 4: Campus Gate Access System&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#core-features_3"&gt;Core Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#primary-users_3"&gt;Primary Users&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#key-challenges_3"&gt;Key Challenges&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#project-5-counseling-appointment-system"&gt;Project 5: Counseling Appointment System&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#core-features_4"&gt;Core Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#primary-users_4"&gt;Primary Users&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#key-challenges_4"&gt;Key Challenges&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h3 id="project-problem-description"&gt;Project Problem Description&lt;/h3&gt;
&lt;p&gt;Select any one topic out of the following:&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="project-1-campus-event-discovery-and-management-platform"&gt;&lt;strong&gt;Project 1: Campus Event Discovery and Management Platform&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;A centralized platform where students can discover, browse, and RSVP to campus events while event organizers can create and manage their events efficiently.&lt;/p&gt;
&lt;h5 id="core-features"&gt;&lt;strong&gt;Core Features&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Event browsing and discovery (talks, sports, clubs, performances)&lt;/li&gt;
&lt;li&gt;RSVP and attendance tracking&lt;/li&gt;
&lt;li&gt;Calendar integration for personal scheduling&lt;/li&gt;
&lt;li&gt;Event creation and management dashboard for organizers&lt;/li&gt;
&lt;li&gt;Ticket management or capacity tracking&lt;/li&gt;
&lt;li&gt;Real-time event updates and notifications&lt;/li&gt;
&lt;li&gt;Event categorization and search filters&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="primary-users"&gt;&lt;strong&gt;Primary Users&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Students  &lt;/li&gt;
&lt;li&gt;Student club leaders  &lt;/li&gt;
&lt;li&gt;LUMS Staff&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="key-challenges"&gt;&lt;strong&gt;Key Challenges&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Calendar API integration  &lt;/li&gt;
&lt;li&gt;Real-time notifications  &lt;/li&gt;
&lt;li&gt;Capacity management  &lt;/li&gt;
&lt;li&gt;Event discovery algorithms  &lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id="project-2-peer-tutoring-marketplace"&gt;&lt;strong&gt;Project 2: Peer Tutoring Marketplace&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;A platform that connects students seeking academic help with peer tutors, enabling scheduling, session management, and quality feedback.&lt;/p&gt;
&lt;h5 id="core-features_1"&gt;&lt;strong&gt;Core Features&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Tutor and student profile creation with subjects/courses&lt;/li&gt;
&lt;li&gt;Tutoring session request and offer system&lt;/li&gt;
&lt;li&gt;Session scheduling and booking&lt;/li&gt;
&lt;li&gt;Rating and review system for tutors&lt;/li&gt;
&lt;li&gt;Session history and progress tracking&lt;/li&gt;
&lt;li&gt;Subject-based tutor matching&lt;/li&gt;
&lt;li&gt;Simple payment integration or credit system (extra)&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="primary-users_1"&gt;&lt;strong&gt;Primary Users&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Students seeking help  &lt;/li&gt;
&lt;li&gt;Peer tutors  &lt;/li&gt;
&lt;li&gt;Academic advisors  &lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="key-challenges_1"&gt;&lt;strong&gt;Key Challenges&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;User matching algorithms  &lt;/li&gt;
&lt;li&gt;Scheduling optimization  &lt;/li&gt;
&lt;li&gt;Review system integrity  &lt;/li&gt;
&lt;li&gt;Payment handling (if applicable)  &lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id="project-3-campus-sustainability-tracker"&gt;&lt;strong&gt;Project 3: Campus Sustainability Tracker&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;A gamified platform that encourages sustainable behavior by allowing students to log daily activities, track environmental impact, and participate in green challenges.&lt;/p&gt;
&lt;h5 id="core-features_2"&gt;&lt;strong&gt;Core Features&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Daily activity logging (transport mode, energy use, waste)&lt;/li&gt;
&lt;li&gt;Personal impact dashboards with visualizations&lt;/li&gt;
&lt;li&gt;Collective campus-wide impact tracking&lt;/li&gt;
&lt;li&gt;Green challenges and competitions&lt;/li&gt;
&lt;li&gt;Leaderboards and achievement badges&lt;/li&gt;
&lt;li&gt;Sustainability tips and educational content&lt;/li&gt;
&lt;li&gt;Team-based challenges for clubs or departments&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="primary-users_2"&gt;&lt;strong&gt;Primary Users&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Students  &lt;/li&gt;
&lt;li&gt;Campus sustainability office  &lt;/li&gt;
&lt;li&gt;Environmental clubs  &lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="key-challenges_2"&gt;&lt;strong&gt;Key Challenges&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Data visualization  &lt;/li&gt;
&lt;li&gt;Gamification mechanics  &lt;/li&gt;
&lt;li&gt;User engagement strategies  &lt;/li&gt;
&lt;li&gt;Impact calculation accuracy  &lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id="project-4-campus-gate-access-system"&gt;&lt;strong&gt;Project 4: Campus Gate Access System&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;A security management system that streamlines visitor entry, credential verification, and entry/exit logging for campus gates.&lt;/p&gt;
&lt;h5 id="core-features_3"&gt;&lt;strong&gt;Core Features&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Guard dashboard for visitor credential checking&lt;/li&gt;
&lt;li&gt;Visitor request submission portal for faculty and staff&lt;/li&gt;
&lt;li&gt;Approved entry time verification&lt;/li&gt;
&lt;li&gt;Entry and exit logging system&lt;/li&gt;
&lt;li&gt;Ad-hoc visitor approval workflow&lt;/li&gt;
&lt;li&gt;Guest pass system for students&lt;/li&gt;
&lt;li&gt;Security audit logs and reporting&lt;/li&gt;
&lt;li&gt;Visitor lookup and search functionality&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="primary-users_3"&gt;&lt;strong&gt;Primary Users&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Security guards  &lt;/li&gt;
&lt;li&gt;Faculty  &lt;/li&gt;
&lt;li&gt;Staff  &lt;/li&gt;
&lt;li&gt;Students  &lt;/li&gt;
&lt;li&gt;Security administrators  &lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="key-challenges_3"&gt;&lt;strong&gt;Key Challenges&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Real-time credential verification  &lt;/li&gt;
&lt;li&gt;Approval workflows  &lt;/li&gt;
&lt;li&gt;Audit trail integrity  &lt;/li&gt;
&lt;li&gt;Mobile accessibility for guards  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Scope Note:&lt;/strong&gt;&lt;br&gt;
Focus on core functionality—guard dashboard, visitor lookup, and entry logging. Advanced features like SMS notifications or facial recognition can be considered for future iterations.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="project-5-counseling-appointment-system"&gt;&lt;strong&gt;Project 5: Counseling Appointment System&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;An appointment management platform that connects students with counseling services, enabling easy booking, scheduling, and session management.&lt;/p&gt;
&lt;h5 id="core-features_4"&gt;&lt;strong&gt;Core Features&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Counselor discovery and availability viewing&lt;/li&gt;
&lt;li&gt;Time slot booking system&lt;/li&gt;
&lt;li&gt;Appointment reminders and notifications&lt;/li&gt;
&lt;li&gt;Rescheduling and cancellation functionality&lt;/li&gt;
&lt;li&gt;Counselor availability management dashboard&lt;/li&gt;
&lt;li&gt;No-show tracking and analytics&lt;/li&gt;
&lt;li&gt;Pre-session intake forms&lt;/li&gt;
&lt;li&gt;Post-session feedback mechanism&lt;/li&gt;
&lt;li&gt;Appointment history for students and counselors&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="primary-users_4"&gt;&lt;strong&gt;Primary Users&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Students  &lt;/li&gt;
&lt;li&gt;Counselors  &lt;/li&gt;
&lt;li&gt;Counseling office administrators  &lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="key-challenges_4"&gt;&lt;strong&gt;Key Challenges&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Privacy and confidentiality  &lt;/li&gt;
&lt;li&gt;Scheduling conflict management  &lt;/li&gt;
&lt;li&gt;Reliable notification system  &lt;/li&gt;
&lt;li&gt;No-show prevention  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Scope Note:&lt;/strong&gt;&lt;br&gt;
Focus on appointment booking flow, availability management, and basic notifications. Intake forms and feedback can be added progressively.&lt;/p&gt;</content><category term="projects"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>Project Problem Description</title><link href="https://lums-cs360-web.github.io/lums-cs360/projects/project_problem_descr.html" rel="alternate"/><published>2025-08-26T00:00:00+05:00</published><updated>2025-08-26T00:00:00+05:00</updated><author><name>LUMS</name></author><id>tag:lums-cs360-web.github.io,2025-08-26:/lums-cs360/projects/project_problem_descr.html</id><summary type="html">&lt;ul&gt;
&lt;li&gt;Dr Abdul Ali Bangash&lt;/li&gt;
&lt;li&gt;Dr Suleman Shahid
status: published
summary: Project Problem Description&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#project-problem-description"&gt;Project Problem Description&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#project-1-campus-event-discovery-and-management-platform"&gt;Project 1: Campus Event Discovery and Management Platform&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#core-features"&gt;Core Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#primary-users"&gt;Primary Users&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#key-challenges"&gt;Key Challenges&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#project-2-peer-tutoring-marketplace"&gt;Project 2: Peer Tutoring Marketplace&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#core-features_1"&gt;Core Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#primary-users_1"&gt;Primary Users&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#key-challenges_1"&gt;Key Challenges&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#project-3-campus-sustainability-tracker"&gt;Project 3: Campus Sustainability Tracker&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#core-features_2"&gt;Core Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#primary-users_2"&gt;Primary Users …&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</summary><content type="html">&lt;ul&gt;
&lt;li&gt;Dr Abdul Ali Bangash&lt;/li&gt;
&lt;li&gt;Dr Suleman Shahid
status: published
summary: Project Problem Description&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#project-problem-description"&gt;Project Problem Description&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#project-1-campus-event-discovery-and-management-platform"&gt;Project 1: Campus Event Discovery and Management Platform&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#core-features"&gt;Core Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#primary-users"&gt;Primary Users&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#key-challenges"&gt;Key Challenges&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#project-2-peer-tutoring-marketplace"&gt;Project 2: Peer Tutoring Marketplace&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#core-features_1"&gt;Core Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#primary-users_1"&gt;Primary Users&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#key-challenges_1"&gt;Key Challenges&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#project-3-campus-sustainability-tracker"&gt;Project 3: Campus Sustainability Tracker&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#core-features_2"&gt;Core Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#primary-users_2"&gt;Primary Users&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#key-challenges_2"&gt;Key Challenges&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#project-4-campus-gate-access-system"&gt;Project 4: Campus Gate Access System&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#core-features_3"&gt;Core Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#primary-users_3"&gt;Primary Users&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#key-challenges_3"&gt;Key Challenges&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#project-5-counseling-appointment-system"&gt;Project 5: Counseling Appointment System&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#core-features_4"&gt;Core Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#primary-users_4"&gt;Primary Users&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#key-challenges_4"&gt;Key Challenges&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h3 id="project-problem-description"&gt;Project Problem Description&lt;/h3&gt;
&lt;p&gt;Select any one topic out of the following:&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="project-1-campus-event-discovery-and-management-platform"&gt;&lt;strong&gt;Project 1: Campus Event Discovery and Management Platform&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;A centralized platform where students can discover, browse, and RSVP to campus events while event organizers can create and manage their events efficiently.&lt;/p&gt;
&lt;h5 id="core-features"&gt;&lt;strong&gt;Core Features&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Event browsing and discovery (talks, sports, clubs, performances)&lt;/li&gt;
&lt;li&gt;RSVP and attendance tracking&lt;/li&gt;
&lt;li&gt;Calendar integration for personal scheduling&lt;/li&gt;
&lt;li&gt;Event creation and management dashboard for organizers&lt;/li&gt;
&lt;li&gt;Ticket management or capacity tracking&lt;/li&gt;
&lt;li&gt;Real-time event updates and notifications&lt;/li&gt;
&lt;li&gt;Event categorization and search filters&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="primary-users"&gt;&lt;strong&gt;Primary Users&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Students  &lt;/li&gt;
&lt;li&gt;Student club leaders  &lt;/li&gt;
&lt;li&gt;LUMS Staff&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="key-challenges"&gt;&lt;strong&gt;Key Challenges&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Calendar API integration  &lt;/li&gt;
&lt;li&gt;Real-time notifications  &lt;/li&gt;
&lt;li&gt;Capacity management  &lt;/li&gt;
&lt;li&gt;Event discovery algorithms  &lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id="project-2-peer-tutoring-marketplace"&gt;&lt;strong&gt;Project 2: Peer Tutoring Marketplace&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;A platform that connects students seeking academic help with peer tutors, enabling scheduling, session management, and quality feedback.&lt;/p&gt;
&lt;h5 id="core-features_1"&gt;&lt;strong&gt;Core Features&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Tutor and student profile creation with subjects/courses&lt;/li&gt;
&lt;li&gt;Tutoring session request and offer system&lt;/li&gt;
&lt;li&gt;Session scheduling and booking&lt;/li&gt;
&lt;li&gt;Rating and review system for tutors&lt;/li&gt;
&lt;li&gt;Session history and progress tracking&lt;/li&gt;
&lt;li&gt;Subject-based tutor matching&lt;/li&gt;
&lt;li&gt;Simple payment integration or credit system (extra)&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="primary-users_1"&gt;&lt;strong&gt;Primary Users&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Students seeking help  &lt;/li&gt;
&lt;li&gt;Peer tutors  &lt;/li&gt;
&lt;li&gt;Academic advisors  &lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="key-challenges_1"&gt;&lt;strong&gt;Key Challenges&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;User matching algorithms  &lt;/li&gt;
&lt;li&gt;Scheduling optimization  &lt;/li&gt;
&lt;li&gt;Review system integrity  &lt;/li&gt;
&lt;li&gt;Payment handling (if applicable)  &lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id="project-3-campus-sustainability-tracker"&gt;&lt;strong&gt;Project 3: Campus Sustainability Tracker&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;A gamified platform that encourages sustainable behavior by allowing students to log daily activities, track environmental impact, and participate in green challenges.&lt;/p&gt;
&lt;h5 id="core-features_2"&gt;&lt;strong&gt;Core Features&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Daily activity logging (transport mode, energy use, waste)&lt;/li&gt;
&lt;li&gt;Personal impact dashboards with visualizations&lt;/li&gt;
&lt;li&gt;Collective campus-wide impact tracking&lt;/li&gt;
&lt;li&gt;Green challenges and competitions&lt;/li&gt;
&lt;li&gt;Leaderboards and achievement badges&lt;/li&gt;
&lt;li&gt;Sustainability tips and educational content&lt;/li&gt;
&lt;li&gt;Team-based challenges for clubs or departments&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="primary-users_2"&gt;&lt;strong&gt;Primary Users&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Students  &lt;/li&gt;
&lt;li&gt;Campus sustainability office  &lt;/li&gt;
&lt;li&gt;Environmental clubs  &lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="key-challenges_2"&gt;&lt;strong&gt;Key Challenges&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Data visualization  &lt;/li&gt;
&lt;li&gt;Gamification mechanics  &lt;/li&gt;
&lt;li&gt;User engagement strategies  &lt;/li&gt;
&lt;li&gt;Impact calculation accuracy  &lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id="project-4-campus-gate-access-system"&gt;&lt;strong&gt;Project 4: Campus Gate Access System&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;A security management system that streamlines visitor entry, credential verification, and entry/exit logging for campus gates.&lt;/p&gt;
&lt;h5 id="core-features_3"&gt;&lt;strong&gt;Core Features&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Guard dashboard for visitor credential checking&lt;/li&gt;
&lt;li&gt;Visitor request submission portal for faculty and staff&lt;/li&gt;
&lt;li&gt;Approved entry time verification&lt;/li&gt;
&lt;li&gt;Entry and exit logging system&lt;/li&gt;
&lt;li&gt;Ad-hoc visitor approval workflow&lt;/li&gt;
&lt;li&gt;Guest pass system for students&lt;/li&gt;
&lt;li&gt;Security audit logs and reporting&lt;/li&gt;
&lt;li&gt;Visitor lookup and search functionality&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="primary-users_3"&gt;&lt;strong&gt;Primary Users&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Security guards  &lt;/li&gt;
&lt;li&gt;Faculty  &lt;/li&gt;
&lt;li&gt;Staff  &lt;/li&gt;
&lt;li&gt;Students  &lt;/li&gt;
&lt;li&gt;Security administrators  &lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="key-challenges_3"&gt;&lt;strong&gt;Key Challenges&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Real-time credential verification  &lt;/li&gt;
&lt;li&gt;Approval workflows  &lt;/li&gt;
&lt;li&gt;Audit trail integrity  &lt;/li&gt;
&lt;li&gt;Mobile accessibility for guards  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Scope Note:&lt;/strong&gt;&lt;br&gt;
Focus on core functionality—guard dashboard, visitor lookup, and entry logging. Advanced features like SMS notifications or facial recognition can be considered for future iterations.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="project-5-counseling-appointment-system"&gt;&lt;strong&gt;Project 5: Counseling Appointment System&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;An appointment management platform that connects students with counseling services, enabling easy booking, scheduling, and session management.&lt;/p&gt;
&lt;h5 id="core-features_4"&gt;&lt;strong&gt;Core Features&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Counselor discovery and availability viewing&lt;/li&gt;
&lt;li&gt;Time slot booking system&lt;/li&gt;
&lt;li&gt;Appointment reminders and notifications&lt;/li&gt;
&lt;li&gt;Rescheduling and cancellation functionality&lt;/li&gt;
&lt;li&gt;Counselor availability management dashboard&lt;/li&gt;
&lt;li&gt;No-show tracking and analytics&lt;/li&gt;
&lt;li&gt;Pre-session intake forms&lt;/li&gt;
&lt;li&gt;Post-session feedback mechanism&lt;/li&gt;
&lt;li&gt;Appointment history for students and counselors&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="primary-users_4"&gt;&lt;strong&gt;Primary Users&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Students  &lt;/li&gt;
&lt;li&gt;Counselors  &lt;/li&gt;
&lt;li&gt;Counseling office administrators  &lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="key-challenges_4"&gt;&lt;strong&gt;Key Challenges&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Privacy and confidentiality  &lt;/li&gt;
&lt;li&gt;Scheduling conflict management  &lt;/li&gt;
&lt;li&gt;Reliable notification system  &lt;/li&gt;
&lt;li&gt;No-show prevention  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Scope Note:&lt;/strong&gt;&lt;br&gt;
Focus on appointment booking flow, availability management, and basic notifications. Intake forms and feedback can be added progressively.&lt;/p&gt;</content><category term="projects"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>CS360 Course Fall 2021</title><link href="https://lums-cs360-web.github.io/lums-cs360/general/outline_old.html" rel="alternate"/><published>2024-11-12T00:00:00+05:00</published><updated>2024-11-12T00:00:00+05:00</updated><author><name>LUMS</name></author><id>tag:lums-cs360-web.github.io,2024-11-12:/lums-cs360/general/outline_old.html</id><summary type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019.
status: published&lt;/p&gt;
&lt;h3 id="cs360-course-outline"&gt;CS360 Course Outline&lt;/h3&gt;
&lt;h4 id="general-information"&gt;General Information&lt;/h4&gt;
&lt;p&gt;Term: Fall 2021
Number of credits: 3 credits&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lecture (E)A1&lt;/strong&gt;
Date and Time: Monday-Wednesday-Friday 11:00-11:50 MT
Location: CCIS L2-190&lt;/p&gt;
&lt;p&gt;Labs start in the second week of classes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lab (E)D01&lt;/strong&gt;
Date and Time: Tuesday 17:00-19:50
Location: CSC B-10&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lab (E)D03&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Date and Time: Wednesday 17:00-19:50
Location: CSC B-02&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lab (E)D04&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Date and Time: Thursday 17:00-19:50
Location: NRE 2-003&lt;/p&gt;
&lt;h4 id="overview"&gt;Overview&lt;/h4&gt;
&lt;p&gt;As an introduction to software engineering, this course is about building software effectively. You will apply good practices, effective design techniques, and development tools within a team project to create an application with a graphical user interface.&lt;/p&gt;
&lt;p&gt;The focus is largely practical, with broad coverage in topics such as: object-oriented design, user interfaces, unit testing, design patterns, and refactoring.&lt;/p&gt;
&lt;p&gt;Communication skills, team dynamics, working with a "customer", and creativity are also important factors in the course project. The knowledge, skills, and experience you gain will be invaluable in your future software development projects.&lt;/p&gt;
&lt;h4 id="objectives"&gt;Objectives&lt;/h4&gt;
&lt;p&gt;We will learn about applying software engineering concepts to design and implement interactive applications.&lt;/p&gt;
&lt;p&gt;One effective way to build such applications is to apply object-oriented design and use software components. To be useful to end users, the design of these applications must also be guided by usability principles. The course involves a team project in building a well-designed Java/Android application with a sophisticated graphical user interface.&lt;/p&gt;
&lt;p&gt;By the end of this course, you will have a strong background in basic software engineering concepts. Also, you will have the skills to implement interactive applications in Android. You will learn to propose and think critically about software and user interface designs.&lt;/p&gt;
&lt;p&gt;Students are expected to participate in all classes and labs.&lt;/p&gt;
&lt;h4 id="course-topics"&gt;Course Topics&lt;/h4&gt;
&lt;p&gt;Software engineering:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;object-oriented analysis and development&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unified Modeling Language&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;software processes&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;requirements&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;testing&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;design patterns&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;refactoring&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;tools&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;revision control&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="course-work-and-evaluation"&gt;Course Work and Evaluation&lt;/h4&gt;
&lt;p&gt;All assignments and project parts are due at 16:00 MT on the due date.&lt;/p&gt;
&lt;p&gt;Exams are synchronized.&lt;/p&gt;
&lt;p&gt;In the labs, the TAs will explain the submission process for lab exercises (typically online). Late submissions will not be accepted.&lt;/p&gt;
&lt;p&gt;|Individual Work  | Assignment 0| required | September 20 | Consultation | &lt;/p&gt;
&lt;!-- @LT-IGNORE:CONSECUTIVE_SPACES@ @LT-IGNORE:WHITESPACE_RULE@ --&gt;
&lt;p&gt;|Individual Work  | Assignment 1|8%        | September 27 | Consultation |&lt;/p&gt;
&lt;!-- @LT-IGNORE:CONSECUTIVE_SPACES@ @LT-IGNORE:WHITESPACE_RULE@ --&gt;
&lt;p&gt;|Individual Work  | Assignment 2|8%        | November 15 | Consultation | &lt;/p&gt;
&lt;!-- @LT-IGNORE:CONSECUTIVE_SPACES@ @LT-IGNORE:WHITESPACE_RULE@ --&gt;
&lt;p&gt;|Individual Work  | Participation|8%        | throughout | Consultation |&lt;/p&gt;
&lt;!-- @LT-IGNORE:CONSECUTIVE_SPACES@ @LT-IGNORE:WHITESPACE_RULE@ --&gt;
&lt;p&gt;|Individual Work  | Final Exam   |36%        | see &lt;a href="https://www.beartracks.ualberta.ca/"&gt;BearTracks&lt;/a&gt; | Consultation | &lt;/p&gt;
&lt;!-- @LT-IGNORE:CONSECUTIVE_SPACES@ @LT-IGNORE:WHITESPACE_RULE@ --&gt;
&lt;p&gt;|-------------------------------------------------------------------------|&lt;/p&gt;
&lt;!-- @LT-IGNORE:CONSECUTIVE_SPACES@ @LT-IGNORE:WHITESPACE_RULE@ --&gt;
&lt;p&gt;|Team Work  | Project Part 0 |required         | September 24 | Teamwork |&lt;/p&gt;
&lt;!-- @LT-IGNORE:CONSECUTIVE_SPACES@ @LT-IGNORE:WHITESPACE_RULE@ --&gt;
&lt;p&gt;|Team Work  | Project Part 1 |required         | October 1 | Teamwork |&lt;/p&gt;
&lt;!-- @LT-IGNORE:CONSECUTIVE_SPACES@ @LT-IGNORE:WHITESPACE_RULE@ --&gt;
&lt;p&gt;|Team Work  | Project Part 2 |8%               | October 15 | Teamwork |&lt;/p&gt;
&lt;!-- @LT-IGNORE:CONSECUTIVE_SPACES@ @LT-IGNORE:WHITESPACE_RULE@ --&gt;
&lt;p&gt;|Team Work  | Project Part 3 |12%               | November 5 | Teamwork |&lt;/p&gt;
&lt;!-- @LT-IGNORE:CONSECUTIVE_SPACES@ @LT-IGNORE:WHITESPACE_RULE@ --&gt;
&lt;p&gt;|Team Work  | Project Part 4 |20%               | November 29 | Teamwork |&lt;/p&gt;
&lt;!-- @LT-IGNORE:CONSECUTIVE_SPACES@ @LT-IGNORE:WHITESPACE_RULE@ --&gt;
&lt;p&gt;|Total      |                 |100%             |             |          |&lt;/p&gt;
&lt;!-- @LT-IGNORE:CONSECUTIVE_SPACES@ @LT-IGNORE:WHITESPACE_RULE@ --&gt;

&lt;h5 id="exams"&gt;Exams:&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;There is no possibility of a reexamination in this course.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The final exam is tentatively scheduled for: Monday, December 13 starting at 14:00.&lt;/p&gt;
&lt;p&gt;You must verify the date and time on BearTracks when the final exam schedule is posted.&lt;/p&gt;
&lt;h5 id="grade-evaluation"&gt;Grade Evaluation:&lt;/h5&gt;
&lt;p&gt;The individualized project score depends on the following main factors: how well your team did, the peer review forms of your team members, your completion of peer review forms, and the instructor and TAs' assessment of your individual contribution.&lt;/p&gt;
&lt;p&gt;The conversion of your total numeric coursework score to a final grade will be based on interpreting the guidelines of the descriptors, letter grading system, and four-point scale as defined in the University Calendar §23.4. That is, grades are assigned on what we judge to be "failure", "minimal pass", "poor", "satisfactory", "good", or "excellent" performance in the context of the class.&lt;/p&gt;
&lt;p&gt;We do not use a particular distribution to do the conversion, but instead use our judgement of how your score reflects mastery of the course material. That said, you generally need to be above the median to earn at least a 3.0 or B.&lt;/p&gt;
&lt;h4 id="course-materials"&gt;Course Materials&lt;/h4&gt;
&lt;p&gt;This course does not have a required textbook. There are a number of excellent resources for this course, available as electronic books or through open access on the Web. See the course eClass site for links.&lt;/p&gt;
&lt;p&gt;Images reproduced in lecture slides have been included under section 29 of the Copyright Act, as fair dealing for research, private study, criticism, or review. Further distribution or uses may infringe copyright on these images.&lt;/p&gt;
&lt;p&gt;In addition to fair dealing, the Copyright Act specifically exempts projected displays by educational institutions for the purposes of education or training on the premises of the education institution.&lt;/p&gt;
&lt;p&gt;Copyright regulations, however, prohibit me from distributing complete copies of the lecture slides on the course eClass site.&lt;/p&gt;
&lt;p&gt;You may assume that any code examples we provide to you are public domain and free for you to take without attribution, unless they are licensed.&lt;/p&gt;
&lt;p&gt;Please see the Final Exam page when posted for representative example questions.&lt;/p&gt;</content><category term="general"/><category term="labs"/><category term="policy"/><category term="grading"/></entry><entry><title>CS360 Course Fall 2021 Old Lab Recordings</title><link href="https://lums-cs360-web.github.io/lums-cs360/general/old_recordings.html" rel="alternate"/><published>2024-11-12T00:00:00+05:00</published><updated>2024-11-12T00:00:00+05:00</updated><author><name>LUMS</name></author><id>tag:lums-cs360-web.github.io,2024-11-12:/lums-cs360/general/old_recordings.html</id><summary type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019.
status: published&lt;/p&gt;</content><category term="general"/><category term="labs"/><category term="policy"/><category term="grading"/></entry><entry><title>CS360 Course Old Project Problem Descriptions</title><link href="https://lums-cs360-web.github.io/lums-cs360/general/old_project_description.html" rel="alternate"/><published>2024-11-12T00:00:00+05:00</published><updated>2024-11-12T00:00:00+05:00</updated><author><name>LUMS</name></author><id>tag:lums-cs360-web.github.io,2024-11-12:/lums-cs360/general/old_project_description.html</id><summary type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019.
status: published&lt;/p&gt;
&lt;p&gt;You are to design and implement a simple, attractive, and easy-to-use Android application to satisfy the follow goals. Your design must be flexible enough to allow future developers to extend or migrate it.&lt;/p&gt;
&lt;p&gt;To assist in meal planning, we want a mobile application that allows one to track their food storage, record their recipes, plan their meals for several days, and prepare shopping lists.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Needs in (Partial) User Story Form&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;User needs are expressed in the form of partial user stories:
As a &lt;role&gt;, I want &lt;goal&gt;.&lt;/p&gt;
&lt;p&gt;These descriptions may change to correct omissions and clarify noticed issues. Talk to the customer and propose options, rather than making what might be an unwarranted assumption or interpretation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ingredient Storage&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;US 01.01.01
As a meal planner, I want to add an ingredient, with a brief description, best before date, location, amount, unit, and ingredient category.&lt;/p&gt;
&lt;p&gt;US 01.02.01
As a meal planner, I want to view an ingredient and its details.&lt;/p&gt;
&lt;p&gt;US 01.03.01&lt;/p&gt;
&lt;p&gt;As a meal planner, I want to edit the details of an ingredient.&lt;/p&gt;
&lt;p&gt;US 01.04.01
As a meal planner, I want to delete an ingredient.&lt;/p&gt;
&lt;p&gt;US 01.05.01
As a meal planner, I want to see a list of my ingredients.&lt;/p&gt;
&lt;p&gt;US 01.06.01
As a meal planner, I want to sort the list of ingredients by description, best before date, location, and ingredient category.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Recipes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;US 02.01.01
As a meal planner, I want to add a recipe, with title, preparation time, number of servings, recipe category, comments, photograph, and list of ingredients.&lt;/p&gt;
&lt;p&gt;US 02.02.01
As a meal planner, I want to add an ingredient to a recipe, with a brief description, amount, unit, and ingredient category.&lt;/p&gt;
&lt;p&gt;US 02.03.01
As a meal planner, I want to delete an ingredient from a recipe.&lt;/p&gt;
&lt;p&gt;US 02.04.01
As a meal planner, I want to view a recipe and its details.&lt;/p&gt;
&lt;p&gt;US 02.05.01
As a meal planner, I want to edit the details of a recipe, including the ingredients.&lt;/p&gt;
&lt;p&gt;US 02.06.01
As a meal planner, I want to delete a recipe.&lt;/p&gt;
&lt;p&gt;US 02.07.01
As a meal planner, I want to see a list of my recipes.&lt;/p&gt;
&lt;p&gt;US 02.08.01
As a meal planner, I want to sort the list of recipes by title, preparation time, number of servings, or recipe category.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Meal Plan&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;US 03.01.01
As a meal planner, I want to make a meal plan, for several upcoming days of meals, based on choosing from my recipes or individually from my ingredient storage.&lt;/p&gt;
&lt;p&gt;US 03.02.01
As a meal planner, I want to scale my recipes to adjust the number of servings for the meal plan.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Shopping List&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;US 04.01.01
As a meal planner, I want to view a shopping list of ingredients that I need to buy, based on my ingredient storage and meal plan.&lt;/p&gt;
&lt;p&gt;US 04.02.01
As a meal planner, I want each ingredient on the shopping list to show its description, amount, unit, and ingredient category.&lt;/p&gt;
&lt;p&gt;US 04.03.01
As a meal planner, I want to sort the shopping list of ingredients by description or  category.&lt;/p&gt;
&lt;p&gt;US 04.04.01
As a meal planner, I want to note that I have picked up an ingredient on the shopping list.&lt;/p&gt;
&lt;p&gt;US 04.05.01
As a meal planner, I want to add ingredients I have picked up to my ingredient storage, reminding me to complete details like location, actual amount, and unit.&lt;/p&gt;</content><category term="general"/><category term="labs"/><category term="policy"/><category term="grading"/></entry><entry><title>CS360 Course Old Project Problem Descriptions Fall 2024</title><link href="https://lums-cs360-web.github.io/lums-cs360/general/old_project_description_f24.html" rel="alternate"/><published>2024-11-12T00:00:00+05:00</published><updated>2024-11-12T00:00:00+05:00</updated><author><name>LUMS</name></author><id>tag:lums-cs360-web.github.io,2024-11-12:/lums-cs360/general/old_project_description_f24.html</id><summary type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019.
status: published&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Warning: This is subject to change!&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="qr-code-event-check-in-system"&gt;QR Code Event Check-In System&lt;/h3&gt;
&lt;p&gt;You are to design and implement a simple, attractive, and easy-to-use Android application to satisfy the following goals. Your design must be flexible enough to allow developers to extend or migrate it.&lt;/p&gt;
&lt;h3 id="description"&gt;Description:&lt;/h3&gt;
&lt;p&gt;Create an event management system where attendees check in using QR codes on their mobile devices. Organizers can track attendance, manage event details, and send notifications.&lt;/p&gt;
&lt;h3 id="features"&gt;Features:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;QR Code Scanning:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Attendees can use the app to scan event-specific QR codes for quick and seamless check-ins.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Firebase Integration:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Utilize Firebase for storing event details, attendee lists, and real-time check-in status updates.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Multi-User Interaction:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Distinguish between organizers and attendees with different app roles and permissions.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Geolocation Verification (Optional):&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Optionally use geolocation to verify that attendees are physically present at the event location during check-in.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Image Upload:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Allow organizers to upload event posters and attendees to upload profile pictures for a more personalized experience.&lt;/p&gt;
&lt;h3 id="scenario"&gt;Scenario:&lt;/h3&gt;
&lt;p&gt;Update for Project 3:&lt;/p&gt;
&lt;p&gt;John, an event organizer, opens the QRCheckIn app for an upcoming tech conference. He generates a unique QR code for the event. Potential attendees browse the events and notice John's event, they view the event poster, and then click sign up to indicate they will attend the event as an attendee. As attendees arrive, they use the app to scan the QR code, automatically checking them into the conference. The app updates John's dashboard in real-time, showing the current attendance. John can also send push notifications to all attendees through the app.&lt;/p&gt;
&lt;p&gt;Scenario for Project 2:
 John, an event organizer, opens the QRCheckIn app for an upcoming tech conference. He generates a unique QR code for the event. As attendees arrive, they use the app to scan the QR code, automatically checking them into the conference. The app updates John's dashboard in real-time, showing the current attendance. John can also send push notifications to all attendees through the app.&lt;/p&gt;
&lt;p&gt;# Actors:&lt;/p&gt;
&lt;p&gt;Organizer: a person who organizes the event and is in control of an event&lt;/p&gt;
&lt;p&gt;Attendee: a person who attends the event&lt;/p&gt;
&lt;p&gt;Administrator: the entity that is responsible for the infrastructure that the game runs on.&lt;/p&gt;
&lt;h3 id="glossary"&gt;Glossary:&lt;/h3&gt;
&lt;p&gt;QR Code: a scannable code, either a barcode, a QR code, or other code scannable by Zebra crossing libraries or google QR code scanning libraries.&lt;/p&gt;
&lt;h3 id="user-stories"&gt;User Stories:&lt;/h3&gt;
&lt;p&gt;User needs are expressed in the form of partial user stories:&lt;/p&gt;
&lt;p&gt;As a &lt;role&gt;, I want &lt;goal&gt;.&lt;/p&gt;
&lt;p&gt;These descriptions may change to correct omissions and clarify noticed issues. New requirements will be introduced for the final project part.&lt;/p&gt;
&lt;h3 id="organizer"&gt;Organizer:&lt;/h3&gt;
&lt;p&gt;US 01.01.01 As an organizer, I want to create a new event and generate a unique QR code for attendee check-ins.&lt;/p&gt;
&lt;p&gt;US 01.01.02 As an organizer, I want the option to reuse an existing QR code for attendee check-ins.&lt;/p&gt;
&lt;p&gt;US 01.02.01 As an organizer, I want to view the list of attendees who have checked in to my event.&lt;/p&gt;
&lt;p&gt;US 01.03.01 As an organizer, I want to send notifications to all attendees through the app.&lt;/p&gt;
&lt;p&gt;US 01.04.01 As an organizer, I want to upload an event poster to provide visual information to attendees.&lt;/p&gt;
&lt;p&gt;US 01.05.01 As an organizer, I want to track real-time attendance and receive alerts for important milestones.&lt;/p&gt;
&lt;p&gt;US 01.06.01 As an organizer, I want to share a generator QR code image to other apps so I can email or update other documents with the QR code.&lt;/p&gt;
&lt;p&gt;US 01.07.01 As an organizer, I want to create a new event and generate a unique promotion QR code that links to the event description and event poster in the app.&lt;/p&gt;
&lt;p&gt;US 01.08.01 As an organizer, I want to see on a map where users are checking in from.&lt;/p&gt;
&lt;p&gt;US 01.09.01 As an organizer, I want to see how many times an attendee has checked into an event.&lt;/p&gt;
&lt;p&gt;[New for Part 3] US 01.10.01 As an organizer, I want to see who is signed up to attend my event.&lt;/p&gt;
&lt;p&gt;[New for Part 3] US 01.11.01 As an organizer, I want to OPTIONALLY limit the number of attendees that can sign up for an event.&lt;/p&gt;
&lt;h3 id="attendee"&gt;Attendee:&lt;/h3&gt;
&lt;p&gt;US 02.01.01 As an attendee, I want to quickly check into an event by scanning the provided QR code.&lt;/p&gt;
&lt;p&gt;US 02.02.01 As an attendee, I want to upload a profile picture for a more personalized experience.&lt;/p&gt;
&lt;p&gt;US 02.02.02 As an attendee, I want to remove profile pictures if need be.&lt;/p&gt;
&lt;p&gt;US 02.02.03 As an attendee, I want to update information such as name, homepage, and contact information on my profile.&lt;/p&gt;
&lt;p&gt;US 02.03.01 As an attendee, I want to receive push notifications with important updates from the event organizers.&lt;/p&gt;
&lt;p&gt;US 02.04.01 As an attendee, I want to view event details and announcements within the app.&lt;/p&gt;
&lt;p&gt;US 02.05.01 As an attendee, I want my profile picture to be deterministically generated from my profile name if I haven't uploaded an profile image yet.&lt;/p&gt;
&lt;p&gt;US 02.06.01 As an attendee, I do not want to login to the app. No username, no password.&lt;/p&gt;
&lt;p&gt;[New for Part 3] US 02.07.01 As an attendee, I want to sign up to attend an event from the event details (as in I promise to go).&lt;/p&gt;
&lt;p&gt;[New for Part 3] US 02.08.01 As an attendee, I want to browse event posters/event details of other events.&lt;/p&gt;
&lt;p&gt;[New for Part 3] US 02.09.01 As an attendee, I want to know what events I signed up for currently and in and in the future.&lt;/p&gt;
&lt;h3 id="both"&gt;Both:&lt;/h3&gt;
&lt;p&gt;US 03.02.01 As a user, I want the option to enable or disable geolocation tracking for event verification.&lt;/p&gt;
&lt;h3 id="administrator"&gt;Administrator:&lt;/h3&gt;
&lt;p&gt;US 04.01.01 As an administrator, I want to be able to remove events.&lt;/p&gt;
&lt;p&gt;US 04.02.01 As an administrator, I want to be able to remove profiles.&lt;/p&gt;
&lt;p&gt;US 04.03.01 As an administrator, I want to be able to remove images.&lt;/p&gt;
&lt;p&gt;US 04.04.01 As an administrator, I want to be able to browse events.&lt;/p&gt;
&lt;p&gt;US 04.05.01 As an administrator, I want to be able to browse profiles.&lt;/p&gt;
&lt;p&gt;US 04.06.01 As an administrator, I want to be able to browse images.&lt;/p&gt;
&lt;p&gt;[New for Part 3 stories do not need to be addressed in Part 2]&lt;/p&gt;</content><category term="general"/><category term="labs"/><category term="policy"/><category term="grading"/></entry><entry><title>Old Lecture Recordings Fall 2020</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/fall_lab_recordings_2020.html" rel="alternate"/><published>2024-11-07T00:00:00+05:00</published><updated>2024-11-07T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-11-07:/lums-cs360/archive/fall_lab_recordings_2020.html</id><summary type="html">&lt;p&gt;Old Lecture Recordings 2020 Fall&lt;/p&gt;</summary><content type="html"/><category term="archive"/><category term="resources"/><category term="reading"/><category term="references"/><category term="videos"/></entry><entry><title>Old Lecture Recordings Fall 2021</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/fall_lab_recordings_2021.html" rel="alternate"/><published>2024-11-07T00:00:00+05:00</published><updated>2024-11-07T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-11-07:/lums-cs360/archive/fall_lab_recordings_2021.html</id><summary type="html">&lt;p&gt;Old Lecture Recordings 2021 Fall&lt;/p&gt;</summary><content type="html"/><category term="archive"/><category term="resources"/><category term="reading"/><category term="references"/><category term="videos"/></entry><entry><title>Course Outline Winter 2024</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/outline-w24.html" rel="alternate"/><published>2024-11-05T00:00:00+05:00</published><updated>2024-11-05T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-11-05:/lums-cs360/archive/outline-w24.html</id><summary type="html">&lt;p&gt;Lecture, Labs, Contact Information, Lecturer, Teaching Assistants, Course Content, Course Description, Prerequisites, Objectives and Learning Outcomes, Course Topics, Learning Resources, Course Schedule, Required Textbook and/or Other Major Course Materials, Recommended or Optional Learning Resources, Course Fees, On-Line Homework Disclaimer, Academic Success Centre, Faculty of Science Student Services, Grade Evaluation, Letter Grades, Statement of Expectations for AI Use, Re-Evaluation of Term Work, Re-examination, Past or Representative Evaluative Material, Labs, Participation, Policies for Late and Missed Work, Late Policy, Non-medical Protected Grounds, Missed Term Work: Assignments, Labs, Quizzes, Project Parts, Midterm Exams, Missed Term Work: Participation, Deferred Final Examination, Required Technology, Labs Assignments and Project, Lecture Participation, Remote Delivery Considerations, Technology Requirements, Recordings of Synchronous Activities, Home-Based Lab Activities, Student Resources for Remote Learning, Student Responsibilities, Academic Integrity and Student Conduct, Contract Cheating and Misuse of University Academic Materials or Other Assets, Contract Cheating: CS Courses, Academic Integrity Issues Related to Minor Formative Assessments, Appropriate Collaboration, Citation, Solo Effort: Participation Exercises, Quizzes, Exams, Confidential: Exams, Consultation: Assignments, Labs, Teamwork: Group Projects, Intellectual Violence, Exam Conduct, Lecture Conduct, Students Eligible for Accessibility-Related Accommodations, Recording and/or Distribution of Course Materials, On-Campus Computer Labs, Recording and/or Distribution of Course Materials, Learning and Working Environment, Feeling Stressed, Anxious, or Upset?, Student Self-Care Guide, Land Acknowledgement, Administrative, Policy about Course Outlines, Disclaimer, Update History, Copyright&lt;/p&gt;</summary><content type="html">&lt;h2 class="western"&gt;General Information&lt;/h2&gt;
&lt;p&gt;Term: Winter 2024&lt;br&gt;Number of credits: 3 credits&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lecture (E)B1&lt;/strong&gt;&lt;br&gt;Date and Time: Monday-Wednesday-Friday, 10:00-10:50 MT&lt;br&gt;Location: C E1-60&lt;br&gt;&lt;span style="font-size: 14px;"&gt;Instructor: Dr. Abram Hindle&lt;/span&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 14px;"&gt;&lt;strong&gt;Lecture (E)B2&lt;/strong&gt;&lt;br&gt;Date and Time: Monday-Wednesday-Friday, 11:00-11:50 MT&lt;br&gt;Location: ETLC E1-017&lt;br&gt;&lt;span&gt;Instructor: Dr. Hazel Campbell&lt;/span&gt;&lt;br&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Labs start in the FIRST week of classes.&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lab (E)H01&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Date and Time: Tuesday, 17:00-19:50&lt;br&gt;Location: ETLC E1-013&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lab (E)H02&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Date and Time: Wednesday, 17:00-19:50&lt;br&gt;Location: ETLC E1-0003&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lab (E)H03&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Date and Time: Thursday, 17:00-19:50&lt;br&gt;Location: CCIS 1-140&lt;br&gt;&lt;/p&gt;
&lt;p&gt;See&amp;nbsp;&lt;a href="https://eclass.srv.ualberta.ca/mod/page/view.php?id=8037436"&gt;Contact Information&lt;/a&gt;&amp;nbsp;for details about your instructor and teaching assistants.&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;script language="JavaScript"&gt;&lt;/script&gt;
&lt;p&gt;&lt;a&gt;&lt;span lang="EN"&gt;Policy about course outlines &lt;/span&gt;&lt;/a&gt;&lt;span lang="EN"&gt;&lt;a id="_anchor_1" onmouseover="msoCommentShow('_anchor_1','_com_1')" onmouseout="msoCommentHide('_com_1')" href="#_msocom_1" language="JavaScript" name="_msoanchor_1"&gt;&lt;/a&gt;can be found in &lt;a href="https://calendar.ualberta.ca/content.php?catoid=36&amp;amp;navoid=11176#course-requirements-evaluation-procedures-and-grading" target="_blank"&gt;Course Requirements, Evaluation Procedures and Grading&lt;/a&gt;
        of the University Calendar.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
    &lt;div&gt;

        &lt;div id="_com_1" language="JavaScript" onmouseover="msoCommentShow('_anchor_1','_com_1')" onmouseout="msoCommentHide('_com_1')"&gt;&lt;a name="_msocom_1"&gt;&lt;/a&gt;

            &lt;p&gt;&lt;span lang="EN"&gt;This statement is required verbatim, as per
                    Calendar regulations.&lt;/span&gt;&lt;/p&gt;

        &lt;/div&gt;

    &lt;/div&gt;

&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Disclaimer: Any errors in this Course Outline and Course Policy are subject to change and will be announced in class. The date of the final examination is set by the Registrar and takes precedence over the final examination date reported in this syllabus.&lt;br&gt;&lt;/p&gt;
&lt;h2 class="western"&gt;Overview&lt;/h2&gt;
&lt;p&gt;As an introduction to software engineering, this course is about building software effectively. You will apply good practices, effective design techniques, and development tools within a team project to create an application with a graphical user interface.&lt;/p&gt;
&lt;p&gt;The focus is largely practical, with broad coverage in topics such as: object-oriented design, user interfaces, unit testing, design patterns, and refactoring.&lt;/p&gt;
&lt;p&gt;Communication skills, team dynamics, working with a "customer", and creativity are also important factors in the course project. The knowledge, skills, and experience you gain will be invaluable in your future software development projects.&lt;/p&gt;
&lt;h2 class="western"&gt;Objectives&lt;/h2&gt;
&lt;p&gt;We will learn about applying software engineering concepts to design and implement interactive applications.&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;One effective way to build such applications is to apply object-oriented design and use software components. To be useful to end users, the design of these applications must also be guided by usability principles. The course involves a team project in
    building a well-designed Java/Android application with a sophisticated graphical user interface.&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;By the end of this course, you will have a strong background in basic software engineering concepts. Also, you will have the skills to implement interactive applications in Android. You will learn to propose and think critically about software and user
    interface designs.&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;Students are expected to participate in all classes and labs.&lt;/p&gt;
&lt;h2 class="western"&gt;Pre-requisites&lt;/h2&gt;
&lt;p&gt;CMPUT 201 or 275&lt;/p&gt;
&lt;h2 class="western"&gt;Course Topics&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Software engineering:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;
        &lt;p style="margin-bottom: 0cm;"&gt;object-oriented analysis and development&lt;br&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
        &lt;p style="margin-bottom: 0cm;"&gt;Unified Modeling Language&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
        &lt;p style="margin-bottom: 0cm;"&gt;software processes&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
        &lt;p style="margin-bottom: 0cm;"&gt;requirements&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
        &lt;p style="margin-bottom: 0cm;"&gt;testing&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
        &lt;p style="margin-bottom: 0cm;"&gt;design patterns&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
        &lt;p style="margin-bottom: 0cm;"&gt;refactoring&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
        &lt;p style="margin-bottom: 0cm;"&gt;tools&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
        &lt;p&gt;revision control&lt;/p&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;h2 class="western"&gt;Course Work and Evaluation&lt;/h2&gt;
&lt;p&gt;&lt;span class="" style="color: rgb(255, 44, 54);"&gt;All assignments and project parts are due at 16:00 MT on the due date.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="" style="color: rgb(255, 44, 54);"&gt;Exams are in-person. Exercises are in person. Midterms are in person.&lt;br&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In the labs, the TAs will explain the submission process for lab exercises (typically online). Late submissions will not be accepted.&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;Note the rightmost column below, which shows collaboration models for each unit of course work. These models are described on the CS course policy page: &lt;br&gt;&lt;/p&gt;
&lt;pre wrap=""&gt;&lt;a href="https://www.ualberta.ca/computing-science/resources/policy-information/department-course-policies.html" target="_blank"&gt;https://www.ualberta.ca/computing-science/resources/policy-information/department-course-policies.html&lt;/a&gt;&lt;/pre&gt;
&lt;pre wrap=""&gt;&lt;br&gt;&lt;/pre&gt;

&lt;table style="width: 550px;" cellspacing="0" cellpadding="2"&gt;
    &lt;colgroup&gt;
        &lt;col width="110"&gt;
        &lt;col width="164"&gt;
        &lt;col width="59"&gt;
        &lt;col width="114"&gt;
        &lt;col width="83"&gt;
    &lt;/colgroup&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td rowspan="6" style="border: 1px solid #000000; padding: 0.05cm;" width="110"&gt;
                &lt;p&gt;Individual Work&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="164"&gt;
                &lt;p&gt;Assignment 0&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="59"&gt;
                &lt;p&gt;required&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="114"&gt;
                &lt;p&gt;January 22&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="83"&gt;
                &lt;p&gt;Consultation&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="164"&gt;
                &lt;p&gt;Assignment 1&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="59"&gt;
                &lt;p&gt;8%&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="114"&gt;
                &lt;p&gt;February 5&lt;br&gt;&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="83"&gt;
                &lt;p&gt;Consultation&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="164"&gt;
                &lt;p&gt;Participation&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="59"&gt;
                &lt;p&gt;7%&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="114"&gt;
                &lt;p&gt;throughout&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="83"&gt;
                &lt;p&gt;Consultation&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="164"&gt;
                &lt;p&gt;Midterm Exam 1&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="59"&gt;
                &lt;p&gt;15%&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="114"&gt;
                &lt;p&gt;January 31&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="83"&gt;
                &lt;p&gt;Solo Effort&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="164"&gt;
                &lt;p&gt;Midterm Exam 2&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="59"&gt;
                &lt;p&gt;15%&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="114"&gt;
                &lt;p&gt;March 4&lt;br&gt;&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="83"&gt;
                &lt;p&gt;Solo Effort&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="164"&gt;
                &lt;p&gt;Midterm Exam 3&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="59"&gt;
                &lt;p&gt;15%&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="114"&gt;
                &lt;p&gt;April 3&lt;br&gt;&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="83"&gt;
                &lt;p&gt;Solo Effort&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td rowspan="5" style="border: 1px solid #000000; padding: 0.05cm;" width="110"&gt;
                &lt;p&gt;Team Work&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="164"&gt;
                &lt;p&gt;Project Part 0&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="59"&gt;
                &lt;p&gt;required&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="114"&gt;
                &lt;p&gt;January 22&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="83"&gt;
                &lt;p&gt;Teamwork&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="164"&gt;
                &lt;p&gt;Project Part 1&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="59"&gt;
                &lt;p&gt;required&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="114"&gt;
                &lt;p&gt;February 5&lt;br&gt;&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="83"&gt;
                &lt;p&gt;Teamwork&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="164"&gt;
                &lt;p&gt;Project Part 2&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="59"&gt;
                &lt;p&gt;8%&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="114"&gt;
                &lt;p&gt;February 16&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="83"&gt;
                &lt;p&gt;Teamwork&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="164"&gt;
                &lt;p&gt;Project Part 3&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="59"&gt;
                &lt;p&gt;12%&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="114"&gt;
                &lt;p&gt;March 8&lt;br&gt;&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="83"&gt;
                &lt;p&gt;Teamwork&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="164"&gt;
                &lt;p&gt;Project Part 4&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="59"&gt;
                &lt;p&gt;20%&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="114"&gt;
                &lt;p&gt;April 8&lt;br&gt;&lt;/p&gt;
            &lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="83"&gt;
                &lt;p&gt;Teamwork&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td rowspan="5" style="border: 1px solid #000000; padding: 0.05cm;" width="110"&gt;&amp;nbsp;&lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="164"&gt;&amp;nbsp;&lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="59"&gt;100%&lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="114"&gt;&amp;nbsp;&lt;/td&gt;
            &lt;td style="border: 1px solid #000000; padding: 0.05cm;" width="83"&gt;&amp;nbsp;&lt;/td&gt;
        &lt;/tr&gt;

    &lt;/tbody&gt;
&lt;/table&gt;

&lt;p class="western" style="font-weight: normal;" lang="pl-PL"&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class="western" style="" lang="pl-PL"&gt;&lt;span style=""&gt;Reading break: Feb 19-23&lt;br&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="western" style="font-weight: normal;" lang="pl-PL"&gt;&lt;strong&gt;Exams:&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span color="#ff0000" class="" style="color: rgb(255, 44, 54);"&gt;* There is no possibility of a reexamination in this course for midterms 1 and 2.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span color="#ff0000" class="" style="color: rgb(255, 44, 54);"&gt;* Midterm 3 has a deferred oral exam. If you miss Midterm 3, you will have to do an oral exam.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;There is NO Final exam.&lt;/strong&gt;
&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;In the midterm exams, you will be asked to code, diagram, write, describe and draw solutions to software engineering problems.&lt;br&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;p class="western"&gt;&lt;strong&gt;Grade Evaluation:&lt;/strong&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The individualized project score depends on the following main factors: how well your team did, the peer review forms of your team members, your completion of peer review forms, and the instructor and TAs' assessment of your individual contribution.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The conversion of your total numeric coursework score to a final grade will be based on interpreting the guidelines of the descriptors, letter grading system, and four-point scale as defined in the University Calendar&amp;nbsp;&lt;a href="http://www.registrar.ualberta.ca/calendar/Regulations-and-Information/Academic-Regulation/23.4.html#23.4" target="_blank"&gt;§23.4&lt;/a&gt;. That is, grades are assigned on what we judge to be "failure", "minimal pass", "poor", "satisfactory", "good", or "excellent" performance in the context of the class.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;We do not use a particular distribution to do the conversion, but instead use our judgement of how your score reflects mastery of the course material. Obtaining 50 course marks or more guarantees a passing grade of at least D. Obtaining 90 course marks or more guarantees a grade of at least A-.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p dir="ltr" id="docs-internal-guid-c76e51f8-7fff-7040-2973-644c442d0960"&gt;Grades are unofficial until approved by the Department and/or Faculty offering the course.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 27px; font-weight: bold;"&gt;Course Materials&lt;/span&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;This course does not have a required textbook. There are a number of excellent resources for this course, available as electronic books or through open access on the Web. See the course eClass site for links.&lt;/p&gt;
&lt;p&gt;Images reproduced in lecture slides have been included under section 29 of the Copyright Act, as fair dealing for research, private study, criticism, or review. Further distribution or uses may infringe copyright on these images.&lt;/p&gt;
&lt;p&gt;In addition to fair dealing, the Copyright Act specifically exempts &lt;i&gt;projected displays&lt;/i&gt; by educational institutions for the purposes of education or training on the &lt;i&gt;premises&lt;/i&gt; of the education institution.&lt;/p&gt;
&lt;p&gt;Copyright regulations, however, prohibit me from distributing &lt;i&gt;complete copies&lt;/i&gt; of the lecture slides on the course eClass site.&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;You may assume that any code examples we provide to you are public domain and free for you to take without attribution, unless they are licensed.&lt;/p&gt;
&lt;p&gt;Please see the exam pages when posted for representative example questions.&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 class="western"&gt;Academic Integrity&lt;/h2&gt;
&lt;p&gt;The University of Alberta is committed to the highest standards of academic integrity and honesty. Students are expected to be familiar with these standards regarding academic honesty and to uphold the policies of the University in this respect. Students
    are particularly urged to familiarize themselves with the provisions of the Code of Student Behaviour (online at &lt;a href="http://www.governance.ualberta.ca" target="_blank"&gt;www.governance.ualberta.ca&lt;/a&gt;) and avoid any behaviour which could potentially
    result in suspicions of cheating, plagiarism, misrepresentation of facts and/or participation in an offence. Academic dishonesty is a serious offence and can result in suspension or expulsion from the University. (GFC 29 SEP 2003)&lt;/p&gt;
&lt;h2 class="western"&gt;Course Policies&lt;/h2&gt;
&lt;p&gt;Please see the &lt;a href="https://eclass.srv.ualberta.ca/mod/page/view.php?id=8037434"&gt;Course Policies&lt;/a&gt; specific to CMPUT 301.&lt;/p&gt;
&lt;p&gt;Most course policies are determined by the Department of Computing Science. See the following page&lt;a href="https://www.cs.ualberta.ca/resources-services/policy-information/department-course-policies"&gt;&lt;/a&gt; for general information on CS course policies.&lt;/p&gt;
&lt;pre wrap=""&gt;&lt;a href="https://www.ualberta.ca/computing-science/resources/policy-information/department-course-policies.html" target="_blank"&gt;https://www.ualberta.ca/computing-science/resources/policy-information/department-course-policies.html&lt;/a&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;</content><category term="archive"/><category term="outline"/><category term="policy"/><category term="grading"/><category term="contact"/></entry><entry><title>2011 W Project Problem Description</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/old_project_descriptions/2011_W_ProjectDesc.html" rel="alternate"/><published>2024-11-04T00:00:00+05:00</published><updated>2024-11-04T00:00:00+05:00</updated><author><name>Tina Nguyen</name></author><id>tag:lums-cs360-web.github.io,2024-11-04:/lums-cs360/resources/old_project_descriptions/2011_W_ProjectDesc.html</id><summary type="html">&lt;p&gt;2011 W Project Problem Description&lt;/p&gt;</summary><content type="html">&lt;h3 id="project-problem-description"&gt;Project Problem Description&lt;/h3&gt;
&lt;p&gt;You are to design and implement an attractive, usable, interactive Java application to help satisfy the following user's goals. Your design should be flexible enough to allow future developers to add new types of entries (see below).&lt;/p&gt;
&lt;h4 id="needs-in-partial-user-story-form"&gt;Needs In (Partial) User Story Form&lt;/h4&gt;
&lt;p&gt;These needs are expressed in the form of partial user stories:
as a &lt;role&gt;, I want &lt;goal&gt;
as a &lt;role&gt;, I want &lt;goal&gt; so that &lt;reason&gt;&lt;/p&gt;
&lt;p&gt;These description may change in minor ways to correct omissions and clarify noticed issues.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;As a user, I want to keep a record of my daily fitness-related activities in a journal so that I can monitor my progress. Types of entries include cardio workouts (i.e., outdoor cycling), strength workouts (i.e., free weights), and comment. There may be multiple, reorderable entries per day.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;As a user, I want to see the entries for a single day, and move backwards and forwards one day at a time.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;As a user, I want to see the entries for the days of four weeks at a time, and move backwards and forwards one week at a time. A week begins on Monday and ends on Sunday.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;As a user, I want to be able to add, edit, and delete entries, including instant, multiple undo and redo of these changes (at the level of entries), so that I can freely make changes at any time.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;As a user, I want data entry to be quick and structured, yet not unduly fussy. This is especially important if I happen to be using the application during a strength workout to keep track of exercises.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;As a user, I want to obtain help, so that I can learn what tasks I can do and what a data field is intended for.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;As a user, I want a comment entry to record a non-workout activity or general observation. Typical uses would be, for example, to note a meal, a weight measure, a waist measure, a resting heart rate measure, a soreness, a sickness, fatigue, mood, etc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;As a user, I want each outdoor cycling workout to include the following information: trip distance (in km, to 2 decimal places), trip time (in hh:mm:ss format), average speed (in km/h, to 2 decimal places), average cadence (in whole revolutions/min), and maximum speed (in km/h, to 2 decimal places). This data will be entered manually, in that order.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;As a user, I want each outdoor cycling workout to include the following optional weather-related information: temperature (in whole degrees Celsius), wind speed (in whole km/h), and direction (one of 16 compass points). This data will be entered manually, in that order.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;As a user, I want each cardio workout to include the following information: time in zone (in hh:mm:ss format), zone start (in whole beats/min), zone end (in whole beats/min), average heart rate (in whole beats/min), peak heart rate (in whole beats/min), and calories expended (in whole kcal). This data will be entered manually, in that order.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;As a user, I want to name and specify preset heart rate values of up to 5 heart rate zones, so that I can choose a named zone to quickly fill in the values for the zone start and end in a cardio workout.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;As a user, I want each free-weight workout to include for each exercise, the exercise name (required), number of sets (optional), number of reps (optional), and amount of weight (optional).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;As a user, I want each strength workout to include the time duration in hh:mm.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;As a user, I want to specify a workout in advance to remind me what activity to do on a particular day. I can delete the workout should it not occur.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;As a user, I want to have a plan for a workout, detailing a particular goal or set of exercises. After the workout, I can rate the workout (0 to 5) on how well I achieved that goal or completed the exercises.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;As a user, I want to avoid reentering plan details if different workouts will have the same plan. Also plans for different workout types should not be mixed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;As a user, I want to add a free-form note to a workout, containing anything else that doesn't belong to one of the existing data fields.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;As a user, I want to have a brief free-form note for a week, so that I can specify the cardio and/or strength goal or phase for that week.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;As a user, I want to see (as needed) a chart of outdoor cycling total trip distances covered in each month for a given year and previous year compared. It should be possible to have this chart visible as workouts are edited. If there is no data for a particular year, omit that year.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;As a user, I want to see (as needed) a chart of outdoor cycling total trip times done in each month for a given year and previous year compared. It should be possible to have this chart visible as workouts are edited. If there is no data for a particular year, omit that year.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;As a user, I want to see the outdoor cycling total trip distance covered and total trip time done so far in the current year compared to that of the previous year.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="old_project_descriptions"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>2012 W Project Problem Description</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/old_project_descriptions/2012_W_ProjectDesc.html" rel="alternate"/><published>2024-11-04T00:00:00+05:00</published><updated>2024-11-04T00:00:00+05:00</updated><author><name>Tina Nguyen</name></author><id>tag:lums-cs360-web.github.io,2024-11-04:/lums-cs360/resources/old_project_descriptions/2012_W_ProjectDesc.html</id><summary type="html">&lt;p&gt;2012 W Project Problem Description&lt;/p&gt;</summary><content type="html">&lt;p&gt;You are to design and implement an attractive, usable, interactive Android application to help satisfy the following user's goals. Your design should be flexible enough to allow future developers to extend it to, for example, add new types of entries (see below).&lt;/p&gt;
&lt;h3 id="users-problem-description"&gt;User's Problem Description&lt;/h3&gt;
&lt;p&gt;I went to my doctor and had a physical. It was embarassing. The doctor pointed out some spots and asked if I had seen them before. I wasn't sure, so neither put pushed the issue any further. We didn't know, so we weren't going to do anything. Another time I went to the doctor and had the doctor investigate a spot on my hand. The doctor asked me if it had changed, I wasn't sure. The doctor asked me if it had grown, I said I assume so because why am I noticing it now. The doctor shrugged, said it looked alright and told me to keep track of it. Come back if it changed.&lt;/p&gt;
&lt;p&gt;I can't remember if it changes, to prove something changed I need evidence. I could take photos of my whole body and keep them in a safe place, but would I remember to take the photos again and consistently?&lt;/p&gt;
&lt;p&gt;Thus I want software that will run on my phone and allow me to take photos of skin issues I might have. These photos will be for my own sanity as well I can provide them to physicians when they are needed.&lt;/p&gt;
&lt;p&gt;I the user want to be able to track and document changes that occur on my skin. I want to use my cellphone to help me document all the blemishes and marks on my skin such that I can keep track of them.&lt;/p&gt;
&lt;h4 id="needs-in-partial-user-story-form"&gt;Needs in (Partial) User Story Form&lt;/h4&gt;
&lt;p&gt;User needs are expressed in the form of partial user stories:
as a &lt;role&gt;, I want &lt;goal&gt;
as a &lt;role&gt;, I want &lt;goal&gt; so that &lt;reason&gt;&lt;/p&gt;
&lt;p&gt;These descriptions may change to correct omissions and clarify noticed issues.&lt;/p&gt;
&lt;p&gt;As a user, I want to keep a visual log of any skin conditions I might . The purpose could be to gather a personal history of  a medical condition as to provide evidence to a physician.&lt;/p&gt;
&lt;p&gt;As a user, I want pictures I take to be stored so that I may recall them and view them later.&lt;/p&gt;
&lt;p&gt;As a user, I want all pictures I take to be timestamped so that I can measure the time between photos and know when an event occurred.&lt;/p&gt;
&lt;p&gt;As a user, I want a method to organize these pictures so that I can view pictures of the same bit of skin over time and see if there is any progression or growth. For instance I might want to organize some photos that are related to my "gross mole that occurs on my right hand".&lt;/p&gt;
&lt;p&gt;As a user if I have an organizational tag or group, I want to be able to add photos to that group so that I can further track the progression of something relevant to that group.&lt;/p&gt;
&lt;p&gt;As a user, I want to be able to review any photos I have taken and view them so that I can see any changes.&lt;/p&gt;
&lt;p&gt;As a user, I want some method of helping me take consistent photos, so that when I show the doctor any progression such as the growth of a mole is evident.&lt;/p&gt;
&lt;p&gt;As a user, I should be able to retake photos I am taking, if I fail to take the photo I want to correct, so that I don't have erroneous photos.&lt;/p&gt;
&lt;p&gt;As a user, I should be able to compare pictures in some manner, so that I can personally inspect them for differences.&lt;/p&gt;
&lt;h4 id="new-needs-for-project-part-4-in-partial-user-story-form"&gt;New Needs for Project Part 4 in (Partial) User Story Form&lt;/h4&gt;
&lt;p&gt;As a user, I am worried that if my phone gets stolen people will see my photos. I want my photos secured via a password.&lt;/p&gt;
&lt;p&gt;As a user, I am worried that if my phone gets stolen people will extract my photos and view them. I want my photos encrypted on the phone so if someone accesses the file system the image data should be encrypted so
they can't extract the jpegs.&lt;/p&gt;
&lt;p&gt;As a user, I want notifications about when I should take photos again. I'm forgetful and being told every so often to take new photos would be helpful. Certain photos I don't have to retake again.&lt;/p&gt;
&lt;p&gt;As a user, I would like to control the rate, per blemish/set of photos that the notifications occur.&lt;/p&gt;
&lt;p&gt;As a user, I want to email a set of photos to my physician.&lt;/p&gt;
&lt;p&gt;As a user, I want to extract a set of the photos into an archive on my
SDCard so I can share them.&lt;/p&gt;
&lt;p&gt;As a user I would like to annotate images with annotations to describe
the scenario that I made this photo&lt;/p&gt;
&lt;p&gt;As a user I would like to tag the images so I can query the image by tag.&lt;/p&gt;
&lt;p&gt;As a user I would like to browse the photos in different ways, by time, by tag, etc.&lt;/p&gt;
&lt;p&gt;As a Doctor, I want to use this application to record information about my own patients. Thus I need to organize blemishes and photo collection per patient.&lt;/p&gt;
&lt;p&gt;As a Doctor, I want to browse my patient photos in different ways, by time, by tag, etc.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;
A class advances and questions are asked new story cards will be created.&lt;/p&gt;</content><category term="old_project_descriptions"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>2013 W Project Problem Description</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/old_project_descriptions/2013_W_ProjectDesc.html" rel="alternate"/><published>2024-11-04T00:00:00+05:00</published><updated>2024-11-04T00:00:00+05:00</updated><author><name>Tina Nguyen</name></author><id>tag:lums-cs360-web.github.io,2024-11-04:/lums-cs360/resources/old_project_descriptions/2013_W_ProjectDesc.html</id><summary type="html">&lt;p&gt;2013 W Project Problem Description&lt;/p&gt;</summary><content type="html">&lt;p&gt;You are to design and implement an attractive, usable, interactive Android application to help satisfy the following user's goals. Your design should be flexible enough to allow future developers to extend it to, for example, add new types of entries (see below).&lt;/p&gt;
&lt;h3 id="users-problem-description"&gt;User's Problem Description&lt;/h3&gt;
&lt;p&gt;I want to keep recipes, but I also want to find recipes, eventually I found similar people had similar goals. Some people wanted recipes they could execute immediately given what they had in their fridge or pantry.&lt;/p&gt;
&lt;p&gt;I want a system where I can record, post, search and download recipes. I want such a system to be able to address the food I have in my pantry and refridgerator.&lt;/p&gt;
&lt;p&gt;It would be nice to include photos of said recipes.&lt;/p&gt;
&lt;p&gt;I want the system to query the recipes system with ingredients I already have and have it suggest appropriate recipes.&lt;/p&gt;
&lt;p&gt;Furthermore it should be easy to share these recipes over email.&lt;/p&gt;
&lt;h4 id="needs-in-partial-user-story-form"&gt;Needs in (Partial) User Story Form&lt;/h4&gt;
&lt;p&gt;User needs are expressed in the form of partial user stories:
as a &lt;role&gt;, I want &lt;goal&gt;
as a &lt;role&gt;, I want &lt;goal&gt; so that &lt;reason&gt;&lt;/p&gt;
&lt;p&gt;These descriptions may change to correct omissions and clarify noticed issues.&lt;/p&gt;
&lt;p&gt;As a user, I want to record recipes.&lt;/p&gt;
&lt;p&gt;As a user, I want to share recipes over email.&lt;/p&gt;
&lt;p&gt;As a user, I want to publish recipes.&lt;/p&gt;
&lt;p&gt;As a user, I want to search for recipes.&lt;/p&gt;
&lt;p&gt;As a user, I want to have some recipes cached so that I don't need the internet to work for me to use this program.&lt;/p&gt;
&lt;p&gt;As a user, I want to post and publish photos associated with the recipe.&lt;/p&gt;
&lt;p&gt;As a user, executing a recipe I want to take photos and attach the photos to the recipe.&lt;/p&gt;
&lt;p&gt;As a user, I want the recipes to be stored so I can view them offline.&lt;/p&gt;
&lt;p&gt;As a user, recipes I make can have multiple photos.&lt;/p&gt;
&lt;p&gt;As a user, I can upload photos for other recipes I did not make, but were downloaded.&lt;/p&gt;
&lt;p&gt;As a user, I should be able to retake photos I am taking, if I fail to take the photo I want to correct, so that I don't have erroneous photos.&lt;/p&gt;
&lt;p&gt;As a user I should be able to get recipes from other users somehow.&lt;/p&gt;
&lt;p&gt;As a user I want to be able to record/edit/view/modify the ingredients I already have.&lt;/p&gt;
&lt;p&gt;As a user I want to be able to query for recipes that have the ingredients I already have.&lt;/p&gt;
&lt;h4 id="new-requirements"&gt;New requirements&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;As&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;want&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;other&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;recipes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;that&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;they&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;can&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;immediately&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;into&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;their&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;recipe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;program&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;


&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;As&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;want&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;modifications&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;recipe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;myself&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;only&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Note&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;doesn&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;t have to be done server side, your&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;could&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;enforce&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;


&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;As&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;want&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;globally&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;recipes&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Recipes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;can&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;have&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;multiple&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;other&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;can&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;see&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;these&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;


&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;As&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;want&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;browse&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;recipes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;


&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;As&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;want&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;recipes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;based&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;subset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;my&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;ingredients&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;


&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;As&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;want&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;organize&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ingredients&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;into&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;folders&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;like&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;fridge&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cabin&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fridge&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;be&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;able&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;recipes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;based&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;these&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;folders&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;


&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;As&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;want&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;optionally&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;browse&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;recipes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;photos&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;


&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;As&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;want&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;recipes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;downloaded&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;already&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;


&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;As&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;want&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;comments&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;recipe&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;As&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;want&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;delete&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cached&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;recipes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;downloaded&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;


&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;As&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;want&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;my&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;recipes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;some&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;kind&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;so&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;can&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;them&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;other&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;programs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;As&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;want&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;browse&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;most&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;popular&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;recipes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;based&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;their&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;downloaded&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;counts&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;As&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;want&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STAR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;good&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;recipes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;want&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;browse&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;recipes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;that&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;everyone&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;has&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;given&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;most&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stars&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Notes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As class advances and questions are asked new story cards will be created.&lt;/p&gt;
&lt;h4 id="webservice-notes"&gt;Webservice Notes&lt;/h4&gt;
&lt;p&gt;Please see the URL: http://www.elasticsearch.org/ and http://www.elasticsearch.org/guide/reference/query-dsl/query-string-query.html&lt;/p&gt;
&lt;p&gt;Each group now has its own personal prefix on the elastisearch. Your Android application can communicate to your group's webservice.&lt;/p&gt;
&lt;p&gt;Binaries should be small, and you can post them, but be sure you read up on how to send binaries to elastisearch  http://www.elasticsearch.org/guide/reference/mapping/core-types.html http://www.elasticsearch.org/guide/reference/api/admin-indices-put-mapping.html&lt;/p&gt;
&lt;p&gt;This webservice is meant to allow posting, listing, deleting and searching recipes. It has a JSON format that can be defined by your group in order to encode more difficult tasks.&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/CMPUT301W13T01/&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/CMPUT301W13T02/&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/CMPUT301W13T03/&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/CMPUT301W13T04/&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/CMPUT301W13T05/&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/CMPUT301W13T07/&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/CMPUT301W13T08/&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/CMPUT301W13T09/&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/CMPUT301W13T10/&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/CMPUT301W13T11/&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/CMPUT301W13T12/&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/CMPUT301W13T13/&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/CMPUT301W13T14/&lt;/p&gt;
&lt;p&gt;These are not protected in anyway and they should stick to their own repos.&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/testing/ is for testing.&lt;/p&gt;</content><category term="old_project_descriptions"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>2014 F Project Problem Description</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/old_project_descriptions/2014_F_ProjectDesc.html" rel="alternate"/><published>2024-11-04T00:00:00+05:00</published><updated>2024-11-04T00:00:00+05:00</updated><author><name>Tina Nguyen</name></author><id>tag:lums-cs360-web.github.io,2024-11-04:/lums-cs360/resources/old_project_descriptions/2014_F_ProjectDesc.html</id><summary type="html">&lt;p&gt;2014 F Project Problem Description&lt;/p&gt;</summary><content type="html">&lt;p&gt;You are to design and implement an attractive, usable, interactive Android application to help satisfy the following user's goals. Your design should be flexible enough to allow future developers to extend it to, for example, add new types of entries (see below).&lt;/p&gt;
&lt;h3 id="users-problem-description"&gt;User's Problem Description&lt;/h3&gt;
&lt;p&gt;We want a mobile question and answer site. A user can browse questions and post answers. A user can pose questions and see answers. Both question and answers can have a small discussion accompanied with them.&lt;/p&gt;
&lt;p&gt;Imagine http://stackoverflow.com/ but geo-location aware.&lt;/p&gt;
&lt;h4 id="needs-in-partial-user-story-form-do-all-of-these"&gt;Needs in (Partial) User Story Form [do all of these]&lt;/h4&gt;
&lt;p&gt;User needs are expressed in the form of partial user stories:
as a &lt;role&gt;, I want &lt;goal&gt;
as a &lt;role&gt;, I want &lt;goal&gt; so that &lt;reason&gt;&lt;/p&gt;
&lt;p&gt;These descriptions may change to correct omissions and clarify noticed issues.&lt;/p&gt;
&lt;p&gt;As a user, I want browse questions.&lt;/p&gt;
&lt;p&gt;As a user, I want to view a question and its answers.&lt;/p&gt;
&lt;p&gt;As a user, I want to view the replies to a question or answer.&lt;/p&gt;
&lt;p&gt;As an author, I want to make questions.&lt;/p&gt;
&lt;p&gt;As an author, I want to answer questions by making an answer.&lt;/p&gt;
&lt;p&gt;As an author, I want to reply to questions and answers to clarify things.&lt;/p&gt;
&lt;p&gt;As an author, I want to attach a picture to my questions or my answers.&lt;/p&gt;
&lt;p&gt;As a sysadmin, I do not want the pictures to be large (&amp;gt; 64kb).&lt;/p&gt;
&lt;p&gt;As a user, I want to sort questions by if they have pictures.&lt;/p&gt;
&lt;p&gt;As a user, I want to sort questions by date or some scoring system.&lt;/p&gt;
&lt;p&gt;As a user, I want to upvote the questions of other users.&lt;/p&gt;
&lt;p&gt;As a user, I want to upvote the answers of other users&lt;/p&gt;
&lt;p&gt;As a user, I want to see the most upvoted questions and most upvoted answers.&lt;/p&gt;
&lt;p&gt;As a user, I want to see how many answers a question has received.&lt;/p&gt;
&lt;p&gt;As a user, I want to search for questions or answers.&lt;/p&gt;
&lt;p&gt;As an author, I want my device to remember which questions I asked.&lt;/p&gt;
&lt;p&gt;As a user, I want questions and answers that I read or questions and answers that I've indicated I want to read, to be locally cached so I can read them when I am not on the internet.&lt;/p&gt;
&lt;p&gt;As a user, I want to explicitly save some questions as favorites.&lt;/p&gt;
&lt;p&gt;As a user, My favorites and their replies should always be available to me regardless of network connectivity.&lt;/p&gt;
&lt;p&gt;As an author, I want to author replies, questions and answers offline.&lt;/p&gt;
&lt;p&gt;As an author, I want to push my replies, questions and answers online once I get connectivity.&lt;/p&gt;
&lt;p&gt;As a user, by default, I should see the most fresh comments.&lt;/p&gt;
&lt;p&gt;As an author, I set my username.&lt;/p&gt;
&lt;h4 id="new-requirements-choose-1-of-these"&gt;New requirements [Choose 1 of these]&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Requirements Cluster: Geolocation&lt;/li&gt;
&lt;li&gt;As an author, I want to be asked if my location should be attached to my post&lt;/li&gt;
&lt;li&gt;As a user I want to be able to query for posts (questions/answers/replies) that are near to me&lt;/li&gt;
&lt;li&gt;As an author, I want my geolocation to come from my GPS, or allow me to set to it&lt;/li&gt;
&lt;li&gt;As a user, I want to know if the location of post is near city or town or country.&lt;/li&gt;
&lt;li&gt;Requirements Cluster: Social Analytics&lt;/li&gt;
&lt;li&gt;As a user, I want to see the trending posts that have recent popularity and activity&lt;/li&gt;
&lt;li&gt;As a user, I want to see who the top contributors are&lt;/li&gt;
&lt;li&gt;As a user, I want to see a summary of what topics are trending, that is a textual analysis or summary of what is happening lately&lt;/li&gt;
&lt;li&gt;As a user, I want to see controversial questions: questions with few upvotes but many replies&lt;/li&gt;
&lt;li&gt;As a user, I want a word cloud of all the posts cached on my phone.&lt;/li&gt;
&lt;li&gt;Requirements Cluster: Recommendations&lt;/li&gt;
&lt;li&gt;As a user I want to browse other questions asked by an author&lt;/li&gt;
&lt;li&gt;As a user I want to browse answers written by an author&lt;/li&gt;
&lt;li&gt;As an author I want to see related questions when I ask a question&lt;/li&gt;
&lt;li&gt;As an author I want to see other question I may be able to answer when I write an answer&lt;/li&gt;
&lt;li&gt;As a user I want to see related questions when I browse questions&lt;/li&gt;
&lt;li&gt;More to come!   &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Notes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As class advances and questions are asked new story cards will be created.&lt;/p&gt;
&lt;h4 id="webservice-notes"&gt;Webservice Notes&lt;/h4&gt;
&lt;p&gt;Please see the URL: http://www.elasticsearch.org/ and Query String DSL&lt;/p&gt;
&lt;p&gt;Each group now has its own personal prefix on the elastisearch. Your Android application can communicate to your group's webservice.&lt;/p&gt;
&lt;p&gt;Binaries should be small, and you can post them, but be sure you read up on how to send binaries to elastisearch  Core-types , Put Mappings&lt;/p&gt;
&lt;p&gt;This webservice is meant to allow posting, listing, deleting and searching recipes. It has a JSON format that can be defined by your group in order to encode more difficult tasks.&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/cmput301f14t01/&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/cmput301f14t02/&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/cmput301f14t03/&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/cmput301f14t04/&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/cmput301f14t05/&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/cmput301f14t06/&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/cmput301f14t07/&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/cmput301f14t08/&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/cmput301f14t09/&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/cmput301f14t10/&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/cmput301f14t11/&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/cmput301f14t12/&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/cmput301f14t13/&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/cmput301f14t14/&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/cmput301f14t15/&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/cmput301f14t16/&lt;/p&gt;
&lt;p&gt;These are not protected in anyway and they should stick to their own repos.&lt;/p&gt;
&lt;p&gt;http://cmput301.softwareprocess.es:8080/testing/ is for testing.&lt;/p&gt;
&lt;p&gt;Requirements Cluster: Recommendations
- As a user I want to browse other questions asked by an author
- As a user I want to browse answers written by an author
- As an author I want to see related questions when I ask a question&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;As an author I want to see other question I may be able to answer when I write an answer&lt;/li&gt;
&lt;li&gt;As a user I want to see related questions when I browse questions&lt;/li&gt;
&lt;/ul&gt;</content><category term="old_project_descriptions"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>2015 F Project Problem Description</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/old_project_descriptions/2015_F_ProjectDesc.html" rel="alternate"/><published>2024-11-04T00:00:00+05:00</published><updated>2024-11-04T00:00:00+05:00</updated><author><name>Tina Nguyen</name></author><id>tag:lums-cs360-web.github.io,2024-11-04:/lums-cs360/resources/old_project_descriptions/2015_F_ProjectDesc.html</id><summary type="html">&lt;p&gt;2015 F Project Problem Description&lt;/p&gt;</summary><content type="html">&lt;h3 id="project-problem-description"&gt;Project Problem Description&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Warning: This is subject to change!&lt;/strong&gt;
You are to design and implement a simple, attractive, and easy-to-use Android application to satisfy the following goals. Your design must be flexible enough to allow developers to extend or migrate it.&lt;/p&gt;
&lt;p&gt;&lt;THINGS&gt; will mean the theme of your group project: condiments, sewing tools, tools, craft supplies, baking supplies, kitchen tools, books, DVDs, games, audio equipment, photography equipment, etc. Each team will choose a theme for their app distinct from other teams. TA will approve the theme.&lt;/p&gt;
&lt;h4 id="users-problem-description"&gt;User's Problem Description&lt;/h4&gt;
&lt;p&gt;We want to create a distributed library where by we can trade &lt;THINGS&gt; with other people.&lt;/p&gt;
&lt;p&gt;We want a mobile application that allows users to record the &lt;THINGS&gt; they have and share them with others! Users can share &lt;THINGS&gt; with each other. This means that you get to see your neighbor's &lt;THINGS&gt; and they can browse your collection of &lt;THINGS&gt;. Then when you want a &lt;THING&gt; from your neighbor you send them a request to see if they want one of your &lt;THINGS&gt; as collateral for their &lt;THING&gt;.&lt;/p&gt;
&lt;h5 id="needs-in-partial-user-story-form"&gt;Needs in (Partial) User Story Form&lt;/h5&gt;
&lt;p&gt;User needs are expressed in the form of partial user stories:
As a &lt;role&gt;, I want &lt;goal&gt;.
As a &lt;role&gt;, I want &lt;goal&gt; so that &lt;reason&gt;.&lt;/p&gt;
&lt;p&gt;These descriptions may change to correct omissions and clarify noticed issues. New requirements will be introduced for the final project part.&lt;/p&gt;
&lt;h5 id="inventory"&gt;Inventory&lt;/h5&gt;
&lt;p&gt;US01.01.01&lt;/p&gt;
&lt;p&gt;As an owner, I want to remove, edit, or add an item to my inventory that I want to share. It will have a name, quantity, quality, category, if I want to share it with others, and comments.&lt;/p&gt;
&lt;p&gt;US01.02.01&lt;/p&gt;
&lt;p&gt;As an owner, I want to view my inventory and its details.&lt;/p&gt;
&lt;p&gt;US01.03.01&lt;/p&gt;
&lt;p&gt;As an owner, I want to view each of my inventory items.&lt;/p&gt;
&lt;p&gt;US01.03.01&lt;/p&gt;
&lt;p&gt;As an owner, not every item in my inventory will be shared or listed. Items that are not to publicly shared will not be. As an owner, I might use them for trades.&lt;/p&gt;
&lt;p&gt;US01.04.01
As an owner, I want to edit and modify inventory items.&lt;/p&gt;
&lt;p&gt;US01.05.01
As an owner, I want to delete inventory items.&lt;/p&gt;
&lt;p&gt;US01.06.01
As an owner, I want the category for an item to be one of 10 relevant categories for &lt;THINGS&gt;.&lt;/p&gt;
&lt;p&gt;US01.07.01
As an owner, I want the entry of an item to have minimal required navigation in the user interface. It must be easy to describe an item.&lt;/p&gt;
&lt;h5 id="friends"&gt;Friends&lt;/h5&gt;
&lt;p&gt;US02.01.01&lt;/p&gt;
&lt;p&gt;As an owner, I want to track people I know. Adding a textual username should be enough.&lt;/p&gt;
&lt;p&gt;US02.02.01&lt;/p&gt;
&lt;p&gt;As an owner, I want to add friends&lt;/p&gt;
&lt;p&gt;US02.03.01&lt;/p&gt;
&lt;p&gt;As an owner, I want to remove friends&lt;/p&gt;
&lt;p&gt;US02.04.01&lt;/p&gt;
&lt;p&gt;As an owner or borrower, I will have a profile where by my contact information and city are recorded.&lt;/p&gt;
&lt;p&gt;US02.05.01&lt;/p&gt;
&lt;p&gt;As an owner or borrower, I will be able to view the profile of anyone I know of including friends.&lt;/p&gt;
&lt;h5 id="browse-search-inventories-of-friends"&gt;Browse Search Inventories of Friends&lt;/h5&gt;
&lt;p&gt;US03.01.01&lt;/p&gt;
&lt;p&gt;As an borrower, I want to search the inventories of my friends.&lt;/p&gt;
&lt;p&gt;US03.01.02&lt;/p&gt;
&lt;p&gt;As an borrower, I want to search/browse the inventories of my friends by category.&lt;/p&gt;
&lt;p&gt;US03.01.03&lt;/p&gt;
&lt;p&gt;As an borrower, I want to search/browse the inventories of my friends by textual query..&lt;/p&gt;
&lt;p&gt;US03.02.01&lt;/p&gt;
&lt;p&gt;As an owner, any of my publicly shared items will be browseable / searchable by my friends.&lt;/p&gt;
&lt;h5 id="trade-with-friends"&gt;Trade with Friends&lt;/h5&gt;
&lt;p&gt;US04.01.01&lt;/p&gt;
&lt;p&gt;As an borrower, I want to offer a trade with a friend. A trade will consist of an item from the owner's inventory and 0 or more items from the borrower's inventory.&lt;/p&gt;
&lt;p&gt;US04.02.01&lt;/p&gt;
&lt;p&gt;As an owner, when a borrower offers a trade I will be notified of the trade.&lt;/p&gt;
&lt;p&gt;US04.03.01&lt;/p&gt;
&lt;p&gt;As an owner, I can accept or decline a trade.&lt;/p&gt;
&lt;p&gt;US04.04.01&lt;/p&gt;
&lt;p&gt;As an owner, upon declining a trade I can offer a counter trade initialized with the items of the declined trade.&lt;/p&gt;
&lt;p&gt;US04.05.01&lt;/p&gt;
&lt;p&gt;As a borrower or owner, when composing a trade or counter-trade I can edit the trade.&lt;/p&gt;
&lt;p&gt;US04.06.01&lt;/p&gt;
&lt;p&gt;As a borrower, when composing a trade or counter-trade I can delete the trade&lt;/p&gt;
&lt;p&gt;US04.07.01&lt;/p&gt;
&lt;p&gt;As an owner, if I accept a trade both parties will be emailed all trade and item information relevant to the trade, as well owner comments for how to continue on with the trade.&lt;/p&gt;
&lt;p&gt;US04.08.01&lt;/p&gt;
&lt;p&gt;As an owner or borrower, I can browse all past and current trades involving me.&lt;/p&gt;
&lt;p&gt;US04.09.01&lt;/p&gt;
&lt;p&gt;As an owner or borrower, I can browse all past and current trades involving me as either borrower or owner. I should look at my trades and trades offered to me.&lt;/p&gt;
&lt;p&gt;US04.10.01 [must]&lt;/p&gt;
&lt;p&gt;As an owner, I can set a trade to complete when the borrower returns the item and the item is now available again.&lt;/p&gt;
&lt;p&gt;US04.11.01 [must]&lt;/p&gt;
&lt;p&gt;As an owner or borrower, a trade is considered current and in-progress when the item is borrowed.&lt;/p&gt;
&lt;p&gt;US04.12.01 [must]&lt;/p&gt;
&lt;p&gt;As an owner or borrower, I should be able to browse in-progress trades, and complete trades.&lt;/p&gt;
&lt;h5 id="photographs-of-items"&gt;Photographs of Items&lt;/h5&gt;
&lt;p&gt;US06.01.01
As an owner, I want to optionally attach photographs of items to the item. Photos are optional for items.&lt;/p&gt;
&lt;p&gt;US06.02.01
As an owner, I want to view any attached photograph for an item.&lt;/p&gt;
&lt;p&gt;US06.03.01
As an owner, I want to delete any attached photograph receipt on an item, so that unclear images can be re-taken.&lt;/p&gt;
&lt;p&gt;US06.04.01
As a sysadmin, I want each receipt image file to be under 65536 bytes in size.&lt;/p&gt;
&lt;p&gt;US06.05.01
As a borrower, if photo downloads are disabled, I want the option of manually choosing inventory photos to download.&lt;/p&gt;
&lt;h5 id="offline-behaviour"&gt;Offline Behaviour&lt;/h5&gt;
&lt;p&gt;US09.01.01
As an owner, I want to make inventory items while offline, and push changes once I get connectivity.&lt;/p&gt;
&lt;p&gt;US09.02.01
As a borrower, I want to make trades while offline, and push changes online once I get connectivity.&lt;/p&gt;
&lt;p&gt;US09.03.01
As a borrower, I should be able to browse the inventories of friends that I previously looked at. Cache the inventories of the friends.&lt;/p&gt;
&lt;h5 id="configuration"&gt;Configuration&lt;/h5&gt;
&lt;p&gt;US10.01.01
As a user, I should be able to specify if I download images or not.&lt;/p&gt;
&lt;p&gt;US10.02.01
As a user, I should be to edit my profile.&lt;/p&gt;
&lt;p&gt;Your team must choose Option 1 features or Option 2 features and implement them.&lt;/p&gt;
&lt;h5 id="item-geolocation-option-1"&gt;Item Geolocation (Option 1)&lt;/h5&gt;
&lt;p&gt;US11.01.01&lt;/p&gt;
&lt;p&gt;As an owner, I want to have a default geolocation (Lat/Long) that will be assigned to my items.&lt;/p&gt;
&lt;p&gt;US11.02.01&lt;/p&gt;
&lt;p&gt;As a user, I should be able to search for items near my current location (GPS or Lat/long). E.g. hammers within 2 km.&lt;/p&gt;
&lt;p&gt;US11.03.01&lt;/p&gt;
&lt;p&gt;As an owner, I should be able use the GPS to determine my geolocation.&lt;/p&gt;
&lt;p&gt;US11.04.01&lt;/p&gt;
&lt;p&gt;As an owner, I should be able to specifically edit the geolocation of each individual item -- items could be located in different locations.&lt;/p&gt;
&lt;h5 id="top-traders-option-2"&gt;Top Traders (Option 2)&lt;/h5&gt;
&lt;p&gt;US12.01.01&lt;/p&gt;
&lt;p&gt;As a user, I should be able to see friends and users who are top-traders. Top traders are users with successful (current, in-progress, and complete) trades. The more successful traders, the more top the trader.&lt;/p&gt;
&lt;h5 id="item-cloning-option-2"&gt;Item Cloning (Option 2)&lt;/h5&gt;
&lt;p&gt;US13.01.01&lt;/p&gt;
&lt;p&gt;As an owner, I should be able to clone another user's item, if I own it or a copy. E.g. I have the same XBOX game as my friend and I don't want to type it in again.&lt;/p&gt;
&lt;p&gt;Revisions:&lt;/p&gt;
&lt;p&gt;2015-11-12 - US10 to US13 added, US04.10 to US04.14 added.&lt;/p&gt;
&lt;p&gt;2015-10-08 - US09.01.01 and US09.02.01 clarified and editted&lt;/p&gt;
&lt;p&gt;2015-10-07 - US06.05.01 changed to manual photo download&lt;/p&gt;
&lt;p&gt;2015-10-07 - the trade with friends section had stories renumbered as US.04. (previously US.03.)&lt;/p&gt;
&lt;p&gt;2015-10-06 - the last US.06.04.01 becomes US.06.05.01&lt;/p&gt;
&lt;p&gt;2015-10-06 - claimant becomes owner in US.06.01.01&lt;/p&gt;</content><category term="old_project_descriptions"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>2015 W Project Problem Description</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/old_project_descriptions/2015_W_ProjectDesc.html" rel="alternate"/><published>2024-11-04T00:00:00+05:00</published><updated>2024-11-04T00:00:00+05:00</updated><author><name>Tina Nguyen</name></author><id>tag:lums-cs360-web.github.io,2024-11-04:/lums-cs360/resources/old_project_descriptions/2015_W_ProjectDesc.html</id><summary type="html">&lt;p&gt;2015 W Project Problem Description&lt;/p&gt;</summary><content type="html">&lt;h3 id="project-problem-description"&gt;Project Problem Description&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Warning: This is subject to change!&lt;/strong&gt;
You are to design and implement a simple, attractive, and easy-to-use Android application to satisfy the following goals. Your design must be flexible enough to allow developers to extend or migrate it.&lt;/p&gt;
&lt;h4 id="users-problem-description"&gt;User's Problem Description&lt;/h4&gt;
&lt;p&gt;We want a mobile application for travel expense tracking and approval.&lt;/p&gt;
&lt;h5 id="needs-in-partial-user-story-form"&gt;Needs in (Partial) User Story Form&lt;/h5&gt;
&lt;p&gt;User needs are expressed in the form of partial user stories:
As a &lt;role&gt;, I want &lt;goal&gt;.
As a &lt;role&gt;, I want &lt;goal&gt; so that &lt;reason&gt;.&lt;/p&gt;
&lt;p&gt;These descriptions may change to correct omissions and clarify noticed issues. New requirements will be introduced for the final project part.&lt;/p&gt;
&lt;h5 id="expense-claims-overall"&gt;Expense Claims / Overall&lt;/h5&gt;
&lt;p&gt;US01.01.01
As a claimant, I want make an expense claim that records my name, a starting date of travel, and an ending date of travel.&lt;/p&gt;
&lt;p&gt;US01.02.01
As a claimant, I want an expense claim to record one or more destinations of travel and an associated reason for travel to each destination.&lt;/p&gt;
&lt;p&gt;US01.03.01
As a claimant, I want to view an expense claim and its details.&lt;/p&gt;
&lt;p&gt;US01.04.01
As a claimant, I want to edit an expense claim while changes are allowed.&lt;/p&gt;
&lt;p&gt;US01.05.01
As a claimant, I want to delete an expense claim while changes are allowed.&lt;/p&gt;
&lt;p&gt;US01.06.01
As a claimant, I want entered information to be remembered, so that I do not lose data.&lt;/p&gt;
&lt;h5 id="expense-claims-listing"&gt;Expense Claims / Listing&lt;/h5&gt;
&lt;p&gt;US02.01.01
As a claimant, I want to list all my expense claims, showing for each claim: the starting date of travel, the destination(s) of travel, the claim status, tags, and total currency amounts.&lt;/p&gt;
&lt;p&gt;US02.02.01
As a claimant, I want the list of expense claims to be sorted by starting date of travel, in order from most recent to oldest, so that ongoing or recent travel expenses are quickly accessible.&lt;/p&gt;
&lt;h5 id="expense-claims-tags"&gt;Expense Claims / Tags&lt;/h5&gt;
&lt;p&gt;US03.01.01
As a claimant, I want to give an expense claim one or more alphanumeric tags, so that claims can be organized by me into groups.&lt;/p&gt;
&lt;p&gt;US03.02.01
As a claimant, I want to manage my personal use of tags by listing the available tags, adding a tag, renaming a tag, and deleting a tag.&lt;/p&gt;
&lt;p&gt;US03.03.01
As a claimant, I want to filter the list of expense claims by tags, to show only those claims that have at least one tag matching any of a given set of one or more filter tags.&lt;/p&gt;
&lt;h5 id="expense-items-overall"&gt;Expense Items / Overall&lt;/h5&gt;
&lt;p&gt;US04.01.01
As a claimant, I want to make one or more expense items for an expense claim, each of which has a date the expense was incurred, a category, a textual description, amount spent, and unit of currency.&lt;/p&gt;
&lt;p&gt;US04.02.01
As a claimant, I want the category for an expense item to be one of air fare, ground transport, vehicle rental, private automobile, fuel, parking, registration, accommodation, meal, or supplies.&lt;/p&gt;
&lt;p&gt;US04.03.01
As a claimant, I want the currency for an expense amount to be one of CAD, USD, EUR, GBP, CHF, JPY, or CNY.&lt;/p&gt;
&lt;p&gt;US04.04.01
As a claimant, I want to manually flag an expense item with an incompleteness indicator, even if all item fields have values, so that I am reminded that the item needs further editing.&lt;/p&gt;
&lt;p&gt;US04.05.01
As a claimant, I want to view an expense item and its details.&lt;/p&gt;
&lt;p&gt;US04.06.01
As a claimant, I want to edit an expense item while changes are allowed.&lt;/p&gt;
&lt;p&gt;US04.07.01
As a claimant, I want to delete an expense item while changes are allowed.&lt;/p&gt;
&lt;p&gt;US04.08.01
As a claimant, I want the entry of an expense item to have minimal required navigation in the user interface.&lt;/p&gt;
&lt;h5 id="expense-items-listing"&gt;Expense Items / Listing&lt;/h5&gt;
&lt;p&gt;US05.01.01
As a claimant, I want to list all the expense items for a claim, in order of entry, showing for each expense item: the date the expense was incurred, the category, the textual description, amount spent, unit of currency, whether there is a photographic receipt, and incompleteness indicator.&lt;/p&gt;
&lt;h5 id="expense-items-receipts"&gt;Expense Items / Receipts&lt;/h5&gt;
&lt;p&gt;US06.01.01
As a claimant, I want to optionally take a single photograph of a receipt and attach the photograph to an editable expense item, so that there is supporting documentation for the expense item in case the physical receipt is lost.&lt;/p&gt;
&lt;p&gt;US06.02.01
As a claimant, I want to view any attached photographic receipt for an expense item.&lt;/p&gt;
&lt;p&gt;US06.03.01
As a claimant, I want to delete any attached photographic receipt on an editable expense item, so that unclear images can be re-taken.&lt;/p&gt;
&lt;p&gt;US06.04.01
As a sysadmin, I want each receipt image file to be under 65536 bytes in size.&lt;/p&gt;
&lt;h5 id="expense-claims-statuses"&gt;Expense Claims / Statuses&lt;/h5&gt;
&lt;p&gt;US07.01.01
As a claimant, I want to submit an expense claim for approval, denoting the claim status as submitted, with no further changes allowed by me to the claim information (except the tags).&lt;/p&gt;
&lt;p&gt;US07.02.01
As a claimant, I want a visual warning when trying to submit an expense claim when there are fields with missing values or there are any incompleteness indicators on the expense items.&lt;/p&gt;
&lt;p&gt;US07.03.01
As a claimant, I want a submitted expense claim that was not approved to be denoted by a claim status of returned, with further changes allowed by me to the claim information.&lt;/p&gt;
&lt;p&gt;US07.04.01
As a claimant, I want a submitted expense claim that was approved to be denoted by a claim status of approved, with no further changes allowed by me to the claim information (except the tags).&lt;/p&gt;
&lt;p&gt;US07.05.01
As a claimant, I want to see the name of the approver and any comment(s) from the approver on a returned or approved claim.&lt;/p&gt;
&lt;h5 id="expense-claims-approval"&gt;Expense Claims / Approval&lt;/h5&gt;
&lt;p&gt;US08.01.01
As an approver, I want to view a list of all the expense claims that were submitted for approval, which have their claim status as submitted, showing for each claim: the claimant name, the starting date of travel, the destination(s) of travel, the claim status, total currency amounts, and any approver name.&lt;/p&gt;
&lt;p&gt;US08.02.01
As an approver, I want the list of submitted expense claims to be sorted by starting date of travel, in order from oldest to most recent, so that older claims are considered first.&lt;/p&gt;
&lt;p&gt;US08.03.01
As an approver, I want to view all the details of a submitted expense claim.&lt;/p&gt;
&lt;p&gt;US08.04.01
As an approver, I want to list all the expense items for a submitted claim, in order of entry, showing for each expense item: the date the expense was incurred, the category, the textual description, amount spent, unit of currency, and whether there is a photographic receipt.&lt;/p&gt;
&lt;p&gt;US08.05.01
As an approver, I want to view any attached photographic receipt for an expense item.&lt;/p&gt;
&lt;p&gt;US08.06.01
As an approver, I want to add a comment to a submitted expense claim, so that I can explain why the claim was returned or provide accounting details for a payment.&lt;/p&gt;
&lt;p&gt;US08.07.01
As an approver, I want to return a submitted expense claim that was not approved, denoting the claim status as returned and setting my name as the approver for the expense claim.&lt;/p&gt;
&lt;p&gt;US08.08.01
As an approver, I want to approve a submitted expense claim that was approved, denoting the claim status as approved and setting my name as the approver for the expense claim.&lt;/p&gt;
&lt;h5 id="expense-claims-offline"&gt;Expense Claims / Offline&lt;/h5&gt;
&lt;p&gt;US09.01.01
As a claimant, I want to make and work on expense claims and items while offline, and push application and expense information online once I get connectivity.&lt;/p&gt;</content><category term="old_project_descriptions"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>2015 W Project Problem Description Surprise</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/old_project_descriptions/2015_W_ProjectDescSurp.html" rel="alternate"/><published>2024-11-04T00:00:00+05:00</published><updated>2024-11-04T00:00:00+05:00</updated><author><name>Tina Nguyen</name></author><id>tag:lums-cs360-web.github.io,2024-11-04:/lums-cs360/resources/old_project_descriptions/2015_W_ProjectDescSurp.html</id><summary type="html">&lt;p&gt;2015 W Project Problem Description Surprise&lt;/p&gt;</summary><content type="html">&lt;h3 id="project-problem-description-surprise"&gt;Project Problem Description Surprise&lt;/h3&gt;
&lt;h5 id="expense-items-driving"&gt;Expense Items / Driving&lt;/h5&gt;
&lt;p&gt;As a claimant, I want to record the starting location, ending location, and distance for a drive and attach this information to an editable expense item with the private automobile category.&lt;/p&gt;
&lt;p&gt;As a claimant, I want the driving locations to come from GPS or allow me to set the locations.&lt;/p&gt;
&lt;p&gt;As a claimant, I want the driving distance to be estimated from the starting and ending locations or allow me to set the distance in kilometres.&lt;/p&gt;
&lt;p&gt;As a claimant, I want to take a photograph of an odometer and attach the photograph to the starting location or the ending location of a drive.&lt;/p&gt;
&lt;h5 id="expense-claims-communication"&gt;Expense Claims / Communication&lt;/h5&gt;
&lt;p&gt;As a claimant, I want to email all the details of an expense claim, organizing the expense items by the categories, in the order of air fare, ground transport, vehicle rental, private automobile, fuel, parking, registration, accommodation, meal, then supplies.&lt;/p&gt;
&lt;p&gt;As a claimant, I want a notification when an expense claim is returned or approved, and there is connectivity.&lt;/p&gt;
&lt;h5 id="expense-claims-native-currency"&gt;Expense Claims / Native Currency&lt;/h5&gt;
&lt;p&gt;As a claimant, I want to note my native currency in which payments are made.&lt;/p&gt;
&lt;p&gt;As a claimant, I want each expense item for which a foreign currency value was entered and later replaced by the equivalent native currency value to keep a record of the foreign currency value.&lt;/p&gt;
&lt;p&gt;As a claimant, I want to compute the expense amount of a private automobile expense item by entering a rate in the native currency per kilometer and multiplying that rate by the distance traveled.&lt;/p&gt;
&lt;h5 id="expense-items-receipt-reading"&gt;Expense Items / Receipt Reading&lt;/h5&gt;
&lt;p&gt;As a claimant, I want to request that a photograph attached to an editable expense item be read, so that the date, category, textual description, amount spent, and unit of currency is entered for me when there is connectivity.&lt;/p&gt;
&lt;p&gt;As a claimant, I want an indicator to show whether a receipt read request succeeded or failed.&lt;/p&gt;
&lt;p&gt;As a receipt reader, I want to view receipt reading requests, and for each one, update the associated expense item with the date, category, textual description, amount spent, and unit of currency, and indicate success or failure.&lt;/p&gt;</content><category term="old_project_descriptions"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>2016 F Project Problem Description</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/old_project_descriptions/2016_F_ProjectDesc.html" rel="alternate"/><published>2024-11-04T00:00:00+05:00</published><updated>2024-11-04T00:00:00+05:00</updated><author><name>Tina Nguyen</name></author><id>tag:lums-cs360-web.github.io,2024-11-04:/lums-cs360/resources/old_project_descriptions/2016_F_ProjectDesc.html</id><summary type="html">&lt;p&gt;2016 F Project Problem Description&lt;/p&gt;</summary><content type="html">&lt;h3 id="project-problem-description"&gt;Project Problem Description&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Warning: This is subject to change!&lt;/strong&gt;
You are to design and implement a simple, attractive, and easy-to-use Android application to satisfy the following goals. Your design must be flexible enough to allow developers to extend or migrate it.
We want a mobile application that allows drivers to search for recent ride requests, and for riders to post requests for rides. Riders will describe the start and end of their ride and their suggested payment. Drivers will browse for nearby requests and accept ride requests that they are willing to fulfil.&lt;/p&gt;
&lt;p&gt;In general, a user can be both a driver and a rider.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;h4 id="needs-in-partial-user-story-form"&gt;Needs in (Partial) User Story Form&lt;/h4&gt;
&lt;p&gt;User needs are expressed in the form of partial user stories:
As a &lt;role&gt;, I want &lt;goal&gt;.
These descriptions may change to correct omissions and clarify noticed issues. New requirements will be introduced for the final project part.&lt;/p&gt;
&lt;h5 id="requests"&gt;Requests&lt;/h5&gt;
&lt;p&gt;US 01.01.01
As a rider, I want to request rides between two locations.
US 01.02.01
As a rider, I want to see current requests I have open.
US 01.03.01
As a rider, I want to be notified if my request is accepted.
US 01.04.01
As a rider, I want to cancel requests.
US 01.05.01
As a rider, I want to be able to phone or email the driver who accepted a request.
US 01.06.01
As a rider, I want an estimate of a fair fare to offer to drivers.
US 01.07.01
As a rider, I want to confirm the completion of a request and enable payment.
US 01.08.01
As a rider, I want to confirm a driver's acceptance. This allows us to choose from a list of acceptances if more than 1 driver accepts simultaneously.&lt;/p&gt;
&lt;p&gt;US 1.09.01 (added 2016-11-14)
As a rider, I should see a description of the driver's vehicle.&lt;/p&gt;
&lt;p&gt;US 1.10.01 (added 2016-11-14)
As a rider, I want to see some summary rating of the drivers who accepted my offers.&lt;/p&gt;
&lt;p&gt;US 1.11.01 (added 2016-11-14)
As a rider, I want to rate a driver for his/her service (1-5).&lt;/p&gt;
&lt;h5 id="status"&gt;Status&lt;/h5&gt;
&lt;p&gt;US 02.01.01
As a rider or driver, I want to see the status of a request that I am involved in
User profile
US 03.01.01
As a user, I want a profile with a unique username and my contact information.
US 03.02.01
As a user, I want to edit the contact information in my profile.
US 03.03.01
As a user, I want to, when a username is presented for a thing, retrieve and show its contact information.&lt;/p&gt;
&lt;p&gt;US 03.04.01 (added 2016-11-14)
As a driver, in my profile I can provide details about the vehicle I drive.&lt;/p&gt;
&lt;h5 id="searching"&gt;Searching&lt;/h5&gt;
&lt;p&gt;US 04.01.01
As a driver, I want to browse and search for open requests by geo-location.
US 04.02.01
As a driver, I want to browse and search for open requests by keyword.&lt;/p&gt;
&lt;p&gt;US 04.03.01 (added 2016-11-14)
As a driver, I should be able filter request searches by price per KM and price.&lt;/p&gt;
&lt;p&gt;US 04.04.01 (added 2016-11-14)
As a driver, I should be able to see the addresses of the requests.&lt;/p&gt;
&lt;p&gt;US 04.05.01 (added 2016-11-14)
As a driver, I should be able to search by address or nearby an address.&lt;/p&gt;
&lt;h5 id="accepting"&gt;Accepting&lt;/h5&gt;
&lt;p&gt;US 05.01.01
As a driver,  I want to accept a request I agree with and accept that offered payment upon completion.
US 05.02.01
As a driver, I want to view a list of things I have accepted that are pending, each request with its description, and locations.
US 05.03.01
As a driver, I want to see if my acceptance was accepted.
US 05.04.01
As a driver, I want to be notified if my ride offer was accepted.&lt;/p&gt;
&lt;h5 id="offline-behavior"&gt;Offline behavior&lt;/h5&gt;
&lt;p&gt;US 08.01.01
As an driver, I want to see requests that I already accepted while offline.
US 08.02.01
As a rider, I want to see requests that I have made while offline.
US 08.03.01
As a rider, I want to make requests that will be sent once I get connectivity again.
US 08.04.01
As a driver, I want to accept requests that will be sent once I get connectivity again.&lt;/p&gt;
&lt;h5 id="location"&gt;Location&lt;/h5&gt;
&lt;p&gt;US 10.01.01
As a rider, I want to specify a start and end geo locations on a map for a request.
US 10.02.01
As a driver, I want to view start and end geo locations on a map for a request.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Requirements cluster 1:&lt;/strong&gt;
US 1.09.01 (car details)
US 03.04.01 (car details)
US 04.03.01 (price search)
US 1.10.01 (ratings)
US 1.11.01 (ratings)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Requirements cluster 2:&lt;/strong&gt;
US 1.09.01 (car details)
US 03.04.01 (car details)
US 04.03.01 (price search)
US 04.04.01 (addresses)
US 04.05.01 (addresses)&lt;/p&gt;</content><category term="old_project_descriptions"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>2016 W Project Problem Description</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/old_project_descriptions/2016_W_ProjectDesc.html" rel="alternate"/><published>2024-11-04T00:00:00+05:00</published><updated>2024-11-04T00:00:00+05:00</updated><author><name>Tina Nguyen</name></author><id>tag:lums-cs360-web.github.io,2024-11-04:/lums-cs360/resources/old_project_descriptions/2016_W_ProjectDesc.html</id><summary type="html">&lt;p&gt;2016 W Project Problem Description&lt;/p&gt;</summary><content type="html">&lt;h3 id="project-problem-description"&gt;Project Problem Description&lt;/h3&gt;
&lt;p&gt;Warning: This is subject to change!&lt;/p&gt;
&lt;p&gt;You are to design and implement a simple, attractive, and easy-to-use Android application to satisfy the following goals. Your design must be flexible enough to allow developers to extend or migrate it.
We want a mobile application that allows owners to record the things they have and share them with borrowers. For example, a thing could be a good (like a piece of camera equipment), a service (like giving a ride in a car), or a resource (like a parking spot). Generally, a thing should be something reusable and typical underused. It is up to each team to choose some specific thing of focus, with approval from the TA.&lt;/p&gt;
&lt;p&gt;In general, a user can be both an owner of their own things and a borrower of someone else's things. A borrower can borrow a thing by making a monetary bid for it. The owner can accept a bid, so the thing becomes borrowed. The owner can denote when a borrowed thing is returned and available again.&lt;/p&gt;
&lt;h4 id="needs-in-partial-user-story-form"&gt;Needs in (Partial) User Story Form&lt;/h4&gt;
&lt;p&gt;User needs are expressed in the form of partial user stories:
As a &lt;role&gt;, I want &lt;goal&gt;.
These descriptions may change to correct omissions and clarify noticed issues. New requirements will be introduced for the final project part.&lt;/p&gt;
&lt;h5 id="things"&gt;Things&lt;/h5&gt;
&lt;p&gt;US 01.01.01
As an owner, I want to add a thing in my things, each denoted with a clear, suitable description.
US 01.02.01
As an owner, I want to view a list of all my things, and their descriptions and statuses.
US 01.03.01
As an owner, I want to view one of my things, its description and status.
US 01.04.01
As an owner, I want to edit a thing in my things.
US 01.05.01
As an owner, I want to delete a thing in my things.&lt;/p&gt;
&lt;h5 id="status"&gt;Status&lt;/h5&gt;
&lt;p&gt;US 02.01.01
As an owner or borrower, I want a thing to have a status of one of: available, bidded, or borrowed.
User profile
US 03.01.01
As a user, I want a profile with a unique username and my contact information.
US 03.02.01
As a user, I want to edit the contact information in my profile.
US 03.03.01
As a user, I want to, when a username is presented for a thing, retrieve and show its contact information.&lt;/p&gt;
&lt;h5 id="searching"&gt;Searching&lt;/h5&gt;
&lt;p&gt;US 04.01.01
As a borrower, I want to specify a set of keywords, and search for all things not currently borrowed whose description contains all the keywords.
US 04.02.01
As a borrower, I want search results to show each thing not currently borrowed with its description, owner username, and status.&lt;/p&gt;
&lt;h5 id="bidding"&gt;Bidding&lt;/h5&gt;
&lt;p&gt;US 05.01.01
As a borrower, I want to bid for an available thing, with a monetary rate (in dollars per hour).
US 05.02.01
As a borrower, I want to view a list of things I have bidded on that are pending, each thing with its description, owner username, and my bid.
US 05.03.01
As an owner, I want to be notified of a bid.
US 05.04.01
As an owner, I want to view a list of my things with bids.
US 05.05.01
As an owner, I want to view the bids on one of my things.
US 05.06.01
As an owner, I want to accept a bid on one of my things, setting its status to borrowed. (Any other bids are declined.)
US 05.07.01
As an owner, I want to decline a bid on one of my things.&lt;/p&gt;
&lt;h5 id="borrowing"&gt;Borrowing&lt;/h5&gt;
&lt;p&gt;US 06.01.01
As a borrower, I want to view a list of things I am borrowing, each thing with its description and owner username.
US 06.02.01
As an owner, I want to view a list of my things being borrowed, each thing with its description and borrower username.&lt;/p&gt;
&lt;h5 id="returning"&gt;Returning&lt;/h5&gt;
&lt;p&gt;US 07.01.01
As an owner, I want to set a borrowed thing to be available when it is returned.&lt;/p&gt;
&lt;h5 id="offline-behavior"&gt;Offline behavior&lt;/h5&gt;
&lt;p&gt;US 08.01.01
As an owner, I want to define new things while offline, and push the additions once I get connectivity.&lt;/p&gt;
&lt;h5 id="photographs"&gt;Photographs&lt;/h5&gt;
&lt;p&gt;US 09.01.01 (added 2016-02-29)
As an owner, I want to optionally attach a photograph to a thing of mine.&lt;/p&gt;
&lt;p&gt;US 09.02.01 (added 2016-02-29)
As an owner, I want to delete any attached photograph for a thing of mine.&lt;/p&gt;
&lt;p&gt;US 09.03.01 (added 2016-02-29)
As an owner or borrower, I want to view any attached photograph for a thing.&lt;/p&gt;
&lt;p&gt;US 09.04.01 (added 2016-02-29)
As a sys admin, I want each photograph to be under 65536 bytes in size.&lt;/p&gt;
&lt;h5 id="location"&gt;Location&lt;/h5&gt;
&lt;p&gt;US 10.01.01 (added 2016-02-29)
As an owner, I want to specify a geo location on a map of where to receive a thing when I accept a bid on the thing.&lt;/p&gt;
&lt;p&gt;US 10.02.01 (added 2016-02-29)
As a borrower, I want to view the geo location of where to receive a thing I will be borrowing.&lt;/p&gt;
&lt;h5 id="wow"&gt;"Wow"&lt;/h5&gt;
&lt;p&gt;Non-trivial requirement(s) on approval from your TA (added 2016-03-11)&lt;/p&gt;</content><category term="old_project_descriptions"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>2017 F Project Problem Description</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/old_project_descriptions/2017_F_ProjectDesc.html" rel="alternate"/><published>2024-11-04T00:00:00+05:00</published><updated>2024-11-04T00:00:00+05:00</updated><author><name>Tina Nguyen</name></author><id>tag:lums-cs360-web.github.io,2024-11-04:/lums-cs360/resources/old_project_descriptions/2017_F_ProjectDesc.html</id><summary type="html">&lt;p&gt;2017 F Project Problem Description&lt;/p&gt;</summary><content type="html">&lt;h3 id="project-problem-description"&gt;Project Problem Description&lt;/h3&gt;
&lt;p&gt;You are to design and implement a simple, attractive, and easy-to-use Android application to satisfy the follow goals. Your design must be flexible enough to allow developers to extend or migrate it.
To assist in forming good habits, we want a mobile application that allows one to track, encourage, and share their habits. Recurring habits could be, for example, "write a joke", "eat breakfast", "exercise dog", "call family", and "no car accident". The intent is to make such habits: regular (e.g., daily), unbroken (so missed habit events are noted), and shared (so there's public pressure not to miss).&lt;/p&gt;
&lt;h4 id="needs-in-partial-user-story-form"&gt;Needs in (Partial) User Story Form&lt;/h4&gt;
&lt;p&gt;User needs are expressed in the form of partial user stories:
As a &lt;role&gt;, I want &lt;goal&gt;.
These descriptions may change to correct omissions and clarify noticed issues. Talk to the customer and propose options, rather than making what might be an unwarranted assumption or interpretation.&lt;/p&gt;
&lt;h5 id="habits"&gt;Habits&lt;/h5&gt;
&lt;p&gt;US 01.01.01
As a participant, I want to add a new type of habit, giving it a brief title, reason, and date to start.
US 01.02.01
As a participant, I want a habit to have a plan for what days of the week it should regularly occur.
US 01.03.01
As a participant, I want to view a given habit and its details.
US 01.04.01
As a participant, I want to edit the details of a habit of mine.
US 01.05.01
As a participant, I want to delete a habit of mine.
US 01.06.01
As a participant, I want a habit title to be no more than 20 characters and habit reason to be no more than 30 characters.
US 01.07.01
As a participant, I want to see what habits I need to do today.
US 01.08.01
As a participant, I want for each habit type, a visual and statistical habit status indicator to show how closely I am following its plan.&lt;/p&gt;
&lt;h5 id="habit-events"&gt;Habit Events&lt;/h5&gt;
&lt;p&gt;US 02.01.01
As a participant, I want to add a habit event to my habit history when I have done a habit as planned.
US 02.02.01
As a participant, I want a habit event to have an optional comment of no more than 20 characters.
US 02.03.01
As a participant, I want a habit event to have an optional photograph to record what happened.
US 02.04.01
As a participant, I want to view a given habit event and all its available details.
US 02.05.01
As a participant, I want to edit the details of a habit event of mine.
US 02.06.01
As a participant, I want to delete a habit event of mine.
US 02.07.01
As a system administrator, I want the storage for each photographic image to be under 65536 bytes.&lt;/p&gt;
&lt;h5 id="profile"&gt;Profile&lt;/h5&gt;
&lt;p&gt;US 03.01.01
As a participant, I want to be uniquely identifiable.
Habit History
US 04.01.01
As a participant, I want to view as a list my habit history, sorted in reverse chronological order (most recent coming first).
US 04.02.01
As a participant, I want to filter my habit history list to show only a particular type of habit.
US 04.03.01
As a participant, I want to filter my habit history list to show only habit events whose comment text contains a given word.&lt;/p&gt;
&lt;h5 id="habit-following-and-sharing"&gt;Habit Following and Sharing&lt;/h5&gt;
&lt;p&gt;US 05.01.01
As a participant, I want to ask another participant to follow the statuses of all their habits, and follow for each of their habits, its most recent event.
US 05.02.01
As a participant, I want to grant another participant permission to follow the statuses of all my habits, and follow for each of my habits, its most recent event.
US 05.03.01
As a participant, I want to view as a list the habit statuses of the participants I am granted to follow, ordered by participant identifier then habit title.
Geolocation and Maps
US 06.01.01
As a participant, I want to optionally attach my current location to a habit event.
US 06.02.01
As a participant, I want to see a map of the habit events (that have locations) from my filtered habit history list.
US 06.03.01
As a participant, I want to see a map of the recent habit events (that have locations) from participants I am following.
US 06.04.01
As a participant, I want to highlight habit events of mine or by participants I am following that are within 5 km of my current location.&lt;/p&gt;
&lt;h5 id="offline-behavior"&gt;Offline Behavior&lt;/h5&gt;
&lt;p&gt;US 07.01.01
As a participant, I want to add, edit, or delete a habit event while offline, and have any of these changes synchronized once I get connectivity.&lt;/p&gt;
&lt;h5 id="wow-factor"&gt;"Wow" Factor&lt;/h5&gt;
&lt;p&gt;Non-trivial requirement(s) of your choice that fit with the app, on approval from your TA
An example could be collecting kudos or badges from other participants. Another example could be partnering for certain habits, like "play tennis".&lt;/p&gt;</content><category term="old_project_descriptions"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>2017 W Project Problem Description</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/old_project_descriptions/2017_W_ProjectDesc.html" rel="alternate"/><published>2024-11-04T00:00:00+05:00</published><updated>2024-11-04T00:00:00+05:00</updated><author><name>Tina Nguyen</name></author><id>tag:lums-cs360-web.github.io,2024-11-04:/lums-cs360/resources/old_project_descriptions/2017_W_ProjectDesc.html</id><summary type="html">&lt;p&gt;2017 W Project Problem Description&lt;/p&gt;</summary><content type="html">&lt;h3 id="project-problem-description"&gt;Project Problem Description&lt;/h3&gt;
&lt;p&gt;You are to design and implement a simple, attractive, and easy-to-use Android application to satisfy the follow goals. Your design must be flexible enough to allow developers to extend or migrate it.
To assist in understanding the emotional states and triggers of individuals and groups, we want a mobile application that allows one to post, track, and share their moods. For  university students or staff, this could allow a clearer picture of their experiences, perceptions, and mental well-being in the face of challenges in academic life.&lt;/p&gt;
&lt;h4 id="needs-in-partial-user-story-form"&gt;Needs in (Partial) User Story Form&lt;/h4&gt;
&lt;p&gt;User needs are expressed in the form of partial user stories:
As a &lt;role&gt;, I want &lt;goal&gt;.
These descriptions may change to correct omissions and clarify noticed issues. Talk to the customer and propose options, rather than making what might be an unwarranted assumption or interpretation.&lt;/p&gt;
&lt;h5 id="moods"&gt;Moods&lt;/h5&gt;
&lt;p&gt;US 01.01.01
As a participant, I want to add a mood event to my mood history, each event with the current date and time, a required emotional state, optional trigger, and optional social situation.
US 01.02.01
As a participant, I want the emotional states to include at least: anger, confusion, disgust, fear, happiness, sadness, shame, and surprise.
US 01.03.01
As a participant, I want consistent emoticons and colors to depict and distinguish the emotional states in any view.
US 01.04.01
As a participant, I want to view a given mood event and all its available details.
US 01.05.01
As a participant, I want to edit the details of a given mood event of mine.
US 01.06.01
As a participant, I want to delete a given mood event of mine.&lt;/p&gt;
&lt;h5 id="other-details"&gt;Other Details&lt;/h5&gt;
&lt;p&gt;US 02.01.01
As a participant, I want to express the reason why for a mood event using a brief textual explanation (no more than 20 characters or 3 words).
US 02.02.01
As a participant, I want to express the reason why for a mood event using a photograph.
US 02.03.01
As a system administrator, I want the storage for each photographic image to be under 65536 bytes.
US 02.04.01
As a participant, I want to specify the social situation for a mood event to be one of: alone, with one other person, with two to several people, or with a crowd.&lt;/p&gt;
&lt;h5 id="profile"&gt;Profile&lt;/h5&gt;
&lt;p&gt;US 03.01.01
As a user, I want a profile with a unique username.&lt;/p&gt;
&lt;h5 id="mood-history"&gt;Mood History&lt;/h5&gt;
&lt;p&gt;US 04.01.01
As a participant, I want to view as a list my mood history, sorted by date and time, in reverse chronological order (most recent coming first).
US 04.02.01
As a participant, I want to filter my mood history list to show only mood events that occurred in the most recent week.
US 04.03.01
As a participant, I want to filter my mood history list to show only mood events with a particular emotional state.
US 04.04.01
As a participant, I want to filter my mood history list to show only mood events whose reason why text contains a given word.&lt;/p&gt;
&lt;h5 id="mood-following-and-sharing"&gt;Mood Following and Sharing&lt;/h5&gt;
&lt;p&gt;US 05.01.01
As a participant, I want to ask another participant to follow their most recent mood event.
US 05.02.01
As a participant, I want to grant another participant permission to follow my most recent mood event.
US 05.03.01
As a participant, I want to view as a list the most recent mood events of the participants I am granted to follow, sorted by date and time, in reverse chronological order (most recent coming first).
US 05.04.01
As a participant, I want to filter my mood following list to show only mood events that occurred in the most recent week.
US 05.05.01
As a participant, I want to filter my mood following list to show only mood events with a particular emotional state.
US 05.06.01
As a participant, I want to filter my mood following list to show only mood events whose reason why text contains a given word.&lt;/p&gt;
&lt;h5 id="geolocation-and-maps"&gt;Geolocation and Maps&lt;/h5&gt;
&lt;p&gt;US 06.01.01
As a participant, I want to optionally attach my current location to a mood event.
US 06.02.01
As a participant, I want to see a map of the mood events (showing their emotional states) from my filtered mood history list (that have locations).
US 06.03.01
As a participant, I want to see a map of the mood events (showing their emotional states and the username) from my filtered mood following list (that have locations).
US 06.04.01
As a participant, I want to see a map of the most recent mood event of every participant (showing their emotional states) if the event has a location and is within 5 km of my current location.&lt;/p&gt;
&lt;h5 id="offline-behavior"&gt;Offline Behavior&lt;/h5&gt;
&lt;p&gt;US 07.01.01
As a participant, I want to add, edit, or delete a mood event while offline, and have any of these changes synchronized once I get connectivity.&lt;/p&gt;
&lt;h5 id="wow-factor"&gt;"Wow" Factor&lt;/h5&gt;
&lt;p&gt;Non-trivial requirement(s) that fit with the app on approval from your TA&lt;/p&gt;</content><category term="old_project_descriptions"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>2018 F Project Problem Description</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/old_project_descriptions/2018_F_ProjectDesc.html" rel="alternate"/><published>2024-11-04T00:00:00+05:00</published><updated>2024-11-04T00:00:00+05:00</updated><author><name>Tina Nguyen</name></author><id>tag:lums-cs360-web.github.io,2024-11-04:/lums-cs360/resources/old_project_descriptions/2018_F_ProjectDesc.html</id><summary type="html">&lt;p&gt;2018 F Project Problem Description&lt;/p&gt;</summary><content type="html">&lt;h3 id="project-problem-description"&gt;Project Problem Description&lt;/h3&gt;
&lt;p&gt;Warning: This is subject to change!&lt;/p&gt;
&lt;p&gt;You are to design and implement a simple, attractive, and easy-to-use Android application to satisfy the following goals. Your design must be flexible enough to allow developers to extend or migrate it.&lt;/p&gt;
&lt;h4 id="users-problem-description"&gt;User's Problem Description&lt;/h4&gt;
&lt;p&gt;I went to my doctor and had a physical. It was embarassing. The doctor pointed out some spots and asked if I had seen them before. I wasn't sure, so neither put pushed the issue any further. We didn't know, so we weren't going to do anything. Another time I went to the doctor and had the doctor investigate a spot on my hand. The doctor asked me if it had changed, I wasn't sure. The doctor asked me if it had grown, I said I assume so because why am I noticing it now. The doctor shrugged, said it looked alright and told me to keep track of it. Come back if it changed.&lt;/p&gt;
&lt;p&gt;I can't remember if it changes, to prove something changed I need evidence. I could take photos of my whole body and keep them in a safe place, but would I remember to take the photos again and consistently? I also would like to take notes as well.&lt;/p&gt;
&lt;p&gt;Thus I want software that will run on my phone and allow me to take photos of skin issues and notes about medical issues I might have. These photos and notes will be for my own sanity as well I can provide them to physicians when they are needed.&lt;/p&gt;
&lt;p&gt;Each photo or note should be timestamped and associated with a problem. Each photo or note should optionally be mapped to a location. Each photo or note should be associated with a location on my body which I can indicate by clicking on paper-doll-cut-out-like image of myself. So if my left arm was affected, I'd click on my left arm on a picture of myself--that body location would recorded. If I suffer headaches near smokestacks I probably want to record the GPS location as well.&lt;/p&gt;
&lt;p&gt;Thus as a user I want to be able to track and document medical issues. I want to use my cellphone to help me document all the blemishes and marks, and other stuff on my body such that I can keep track of them.&lt;/p&gt;
&lt;h4 id="needs-in-partial-user-story-form"&gt;Needs in (Partial) User Story Form&lt;/h4&gt;
&lt;p&gt;User needs are expressed in the form of partial user stories:&lt;/p&gt;
&lt;p&gt;As a &lt;role&gt;, I want &lt;goal&gt;.&lt;/p&gt;
&lt;p&gt;These descriptions may change to correct omissions and clarify noticed issues.&lt;/p&gt;
&lt;h5 id="task-basics"&gt;Task Basics&lt;/h5&gt;
&lt;p&gt;US 01.01.01&lt;/p&gt;
&lt;p&gt;As a patient I want to record my problems, each denoted with a title, date started, and a brief description.&lt;/p&gt;
&lt;p&gt;US 01.01.02 (added 2018-02-14)
As a patient, I want the maximum length of the task title to be at least 30 characters.&lt;/p&gt;
&lt;p&gt;US 01.01.03 (added 2018-02-14)
As a patient, I want the maximum length of the task description to be at least 300 characters.&lt;/p&gt;
&lt;p&gt;US 01.02.01
As a patient, I want to view a list of my problems, with their titles, dates, and number of records.&lt;/p&gt;
&lt;p&gt;US 01.03.01 (revised 2018-02-16)
As a patient, I want to edit the details for any one of my problems.&lt;/p&gt;
&lt;p&gt;US 01.04.01
As a patient, I want to delete a problem of mine.&lt;/p&gt;
&lt;p&gt;US 01.05.01&lt;/p&gt;
&lt;p&gt;As a patient I want to add records (photos, locations, comments) to problems.&lt;/p&gt;
&lt;h5 id="record-details"&gt;Record Details&lt;/h5&gt;
&lt;p&gt;US 02.01.01
As a patient or care provider, I want to view all the records for a given problem, including its title, description, photo, etc.&lt;/p&gt;
&lt;p&gt;US 02.02.01
As a patient, I want to add records to problems.&lt;/p&gt;
&lt;p&gt;US 02.03.01
As a patient, records can have a geo-location.&lt;/p&gt;
&lt;p&gt;US 02.04.01
As a patient, records can have a body location.&lt;/p&gt;
&lt;p&gt;US 02.05.01
As a patient, records can have a title and comment.&lt;/p&gt;
&lt;p&gt;US 02.06.01
As a patient, records can have a photo.&lt;/p&gt;
&lt;p&gt;US 02.07.01
As care provider, I want to add new comment records to a problem for my patients.&lt;/p&gt;
&lt;p&gt;US 02.08.01
As a patient, records have a timestamp.&lt;/p&gt;
&lt;p&gt;US 02.09.01&lt;/p&gt;
&lt;p&gt;As a patient, I want some method of helping me take consistent photos, so that when I show the doctor any progression such as the growth of a mole is evident.&lt;/p&gt;
&lt;p&gt;US 02.10.01&lt;/p&gt;
&lt;p&gt;As a patient, I need to have a slideshow mode whereby photo records of a problem can be browsed by clicking. So I could "animate” changes to a doctor.&lt;/p&gt;
&lt;h5 id="user-profile"&gt;User Profile&lt;/h5&gt;
&lt;p&gt;US 03.01.01
As a patient, I want a profile with a unique userid and my contact information.&lt;/p&gt;
&lt;p&gt;US 03.01.02
As a patient, I want the minimum userid to be at least 8 characters.&lt;/p&gt;
&lt;p&gt;US 03.01.03
As a patient, I want the contact information to include an email address and a phone number.&lt;/p&gt;
&lt;p&gt;US 03.02.01
As a patient, I want to edit the contact information in my profile.&lt;/p&gt;
&lt;p&gt;US 03.03.01
As a patient or care provider, I want to, whenever a username is shown, be able to retrieve and see its corresponding contact information.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;US 03.04.01 &lt;em&gt;new&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;As a patient or care provider, I do not want to have to ever use a password, remember a password, or have to care about a password. If I need security tokens or anything like that it must be hidden from me.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;US 03.05.01 *new&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;As a patient or care provider, when I use a new device I want to be able to use the same profile.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;US 03.06.01 &lt;em&gt;new&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;As a patient, I want to be able to share a very short code, or something visually scannable by a photo camera, with a care provider so they can add my profile.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;US 03.07.01 &lt;em&gt;new&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;As a patient, I want to be able to share a very short code, or something visually scannable by a photo camera, with myself so I can enable a new device to browse as me.&lt;/strong&gt;&lt;/p&gt;
&lt;h5 id="searching"&gt;Searching&lt;/h5&gt;
&lt;p&gt;US 04.01.01
As a patient or care provider, I want to specify a set of keywords, and search for all problems or records that contains all the keywords.&lt;/p&gt;
&lt;p&gt;US 04.02.01
As a patient or care provider, I want to specify a set of keywords, and search for all problems or records that are near a particular Geo-location.&lt;/p&gt;
&lt;p&gt;US 04.03.01
As a patient or care provider, I want to specify a set of keywords, and search for all problems or records that are near a particular body-location.&lt;/p&gt;
&lt;h5 id="patient-assigned"&gt;Patient Assigned&lt;/h5&gt;
&lt;p&gt;US 06.01.01
As a care provider, I want to view a list of patients I am assigned to.&lt;/p&gt;
&lt;h5 id="care-provider"&gt;Care Provider&lt;/h5&gt;
&lt;p&gt;US 07.01.01&lt;/p&gt;
&lt;p&gt;As a care provider, I want to add patients that I am assigned to.&lt;/p&gt;
&lt;p&gt;US 07.01.02&lt;/p&gt;
&lt;p&gt;As a care provider, I want to want to browse my patients problems.&lt;/p&gt;
&lt;p&gt;US 07.01.03&lt;/p&gt;
&lt;p&gt;As a care provider, I want to add comment records to my patients' problems&lt;/p&gt;
&lt;h5 id="offline-behavior"&gt;Offline behavior&lt;/h5&gt;
&lt;p&gt;US 08.01.01
As a patient, I want to add or edit problems and records while off the network, and have these changes synchronized once I regain connectivity.&lt;/p&gt;
&lt;h5 id="photographs"&gt;Photographs&lt;/h5&gt;
&lt;p&gt;US 09.01.01
As a patient, I want to optionally attach one or more photographs as further viewable details to a record of mine.&lt;/p&gt;
&lt;p&gt;US 09.01.02 (added 2018-04-06)
As a patient, I want the maximum number of photographs that can be attached to a record to be at least 10.&lt;/p&gt;
&lt;p&gt;US 09.02.01
As a patient or care provider, I want to view any attached photograph for a record.&lt;/p&gt;
&lt;p&gt;US 09.03.01
As a sys admin, I want each photograph to be under 65536 bytes in size.&lt;/p&gt;
&lt;h5 id="geolocation-and-maps"&gt;Geolocation and Maps&lt;/h5&gt;
&lt;p&gt;US 10.01.01
As a patient, I want to specify a geo location on a map of a record.&lt;/p&gt;
&lt;p&gt;US 10.02.01
As a patient or provider, I want to view any geo location for a record, on a map.&lt;/p&gt;
&lt;p&gt;US 10.03.01
As a patient or care provider, I want to see a map of all records for a patient (that have locations).&lt;/p&gt;
&lt;h5 id="body-locations"&gt;Body-locations&lt;/h5&gt;
&lt;p&gt;US 11.01.01&lt;/p&gt;
&lt;p&gt;As a patient, I want to upload at least front and back body-location photos so I may indicate where photo records were taken on my body.&lt;/p&gt;
&lt;p&gt;US 11.02.01&lt;/p&gt;
&lt;p&gt;As a patient, body locations are effectively a reference to a body-location photo and a point location on the photo.&lt;/p&gt;
&lt;p&gt;US 11.03.01&lt;/p&gt;
&lt;p&gt;As a patient, I should be able to have at least 2 body location pictures.&lt;/p&gt;
&lt;p&gt;US 11.04.01&lt;/p&gt;
&lt;p&gt;As a patient, when I view a body location it should be a clear indicator of a point on a body-location picture.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;US 11.05.01 &lt;em&gt;new&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;As a patient, when making a record I want to choose from available body locations to associate with a photo or a record.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;US 11.06.01 &lt;em&gt;new&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;As a patient, I should be able to add body location photos.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;US 11.07.01 &lt;em&gt;new&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;As a patient, I should be able to remove body location photos.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;US 11.08.01 &lt;em&gt;new&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;As a patient, I should be able to label body location photos.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;US 11.09.01 &lt;em&gt;new&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;As a patient, I want body-location photos stored locally on my device (and remotely) so that access to them is fast.&lt;/strong&gt;&lt;/p&gt;
&lt;h5 id="sys-admin"&gt;Sys-admin&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;US 12.01.01 &lt;em&gt;new&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;As a sysadmin, I want to use a Free/Libre Open Source Software service-side tool such as Elasticsearch to host this application. No proprietary software for data-hosting.&lt;/strong&gt;&lt;/p&gt;
&lt;h5 id="wow-factor"&gt;"Wow" Factor&lt;/h5&gt;
&lt;p&gt;Non-trivial, visible requirement(s) of your choice that fit with the app, on approval from your TA. This should be decided for the initial use cases.&lt;/p&gt;
&lt;p&gt;An example could be a nice UI for the paper-cut-out-doll view. Another could be dealing with records (that have locations) from a map view.&lt;/p&gt;
&lt;p&gt;Another wow factor could be encryption---if you can encrypt photos that are uploaded.&lt;/p&gt;</content><category term="old_project_descriptions"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>2018 W Project Problem Description</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/old_project_descriptions/2018_W_ProjectDesc.html" rel="alternate"/><published>2024-11-04T00:00:00+05:00</published><updated>2024-11-04T00:00:00+05:00</updated><author><name>Tina Nguyen</name></author><id>tag:lums-cs360-web.github.io,2024-11-04:/lums-cs360/resources/old_project_descriptions/2018_W_ProjectDesc.html</id><summary type="html">&lt;p&gt;2018 W Project Problem Description&lt;/p&gt;</summary><content type="html">&lt;h3 id="project-problem-description"&gt;Project Problem Description&lt;/h3&gt;
&lt;p&gt;Warning: This is subject to change!&lt;/p&gt;
&lt;p&gt;You are to design and implement a simple, attractive, and easy-to-use Android application to satisfy the following goals. Your design must be flexible enough to allow developers to extend or migrate it.&lt;/p&gt;
&lt;p&gt;We want a mobile application that allows task requesters to post the tasks they would like done by task providers. For example, a task could be giving a ride in a car or delivering a package, within the city.&lt;/p&gt;
&lt;p&gt;In general, a user of the app could be both a task requester and a task provider. A task provider can offer their service by making a monetary bid on a task. The task requester can accept a bid, so the task is assigned to the winning task provider. The task requester can denote when the task is done.&lt;/p&gt;
&lt;h4 id="needs-in-partial-user-story-form"&gt;Needs in (Partial) User Story Form&lt;/h4&gt;
&lt;p&gt;User needs are expressed in the form of partial user stories:&lt;/p&gt;
&lt;p&gt;As a &lt;role&gt;, I want &lt;goal&gt;.&lt;/p&gt;
&lt;p&gt;These descriptions may change to correct omissions and clarify noticed issues.&lt;/p&gt;
&lt;h5 id="task-basics"&gt;Task Basics&lt;/h5&gt;
&lt;p&gt;US 01.01.01
As a task requester, I want to add a task to my tasks, each denoted with a title, brief description, and initial status: requested.&lt;/p&gt;
&lt;p&gt;US 01.01.02 (added 2018-02-14)
As a task requester, I want the maximum length of the task title to be at least 30 characters.&lt;/p&gt;
&lt;p&gt;US 01.01.03 (added 2018-02-14)
As a task requester, I want the maximum length of the task description to be at least 300 characters.&lt;/p&gt;
&lt;p&gt;US 01.02.01
As a task requester, I want to view a list of my tasks, with their titles and statuses.&lt;/p&gt;
&lt;p&gt;US 01.03.01 (revised 2018-02-16)
As a task requester, I want to edit the details for any one of my tasks with status: requested.&lt;/p&gt;
&lt;p&gt;US 01.04.01
As a task requester, I want to delete a task of mine.&lt;/p&gt;
&lt;h5 id="task-details"&gt;Task Details&lt;/h5&gt;
&lt;p&gt;US 02.01.01
As a task requester or provider, I want to view all the details for a given task, including its title, description, status, and lowest bid so far (if any).&lt;/p&gt;
&lt;p&gt;US 02.02.01
As a task requester or provider, I want a task to have a status to be one of: requested, bidded, assigned, or done.&lt;/p&gt;
&lt;p&gt;Bidded means at least one provider bidded on the task.&lt;/p&gt;
&lt;h5 id="user-profile"&gt;User Profile&lt;/h5&gt;
&lt;p&gt;US 03.01.01
As a user, I want a profile with a unique username and my contact information.&lt;/p&gt;
&lt;p&gt;US 03.01.02 (added 2018-02-16)
As a user, I want the maximum length of a username to be at least 8 characters.&lt;/p&gt;
&lt;p&gt;US 03.01.03 (added 2018-02-16)
As a user, I want the contact information to include an email address and a phone number.&lt;/p&gt;
&lt;p&gt;US 03.02.01
As a user, I want to edit the contact information in my profile.&lt;/p&gt;
&lt;p&gt;US 03.03.01
As a user, I want to, whenever a username is shown, be able to retrieve and see its corresponding contact information.&lt;/p&gt;
&lt;h5 id="searching"&gt;Searching&lt;/h5&gt;
&lt;p&gt;US 04.01.01
As a task provider, I want to specify a set of keywords, and search for all tasks, with status: requested or bidded, whose description contains all the keywords.&lt;/p&gt;
&lt;p&gt;US 04.02.01
As a task provider, I want search results to show each task with its task requester username, title, status, lowest bid so far (if any).&lt;/p&gt;
&lt;h5 id="task-bidding"&gt;Task Bidding&lt;/h5&gt;
&lt;p&gt;US 05.01.01
As a task provider, I want to make a bid on a given task with status: requested or bidded, using a monetary amount.&lt;/p&gt;
&lt;p&gt;US 05.02.01 (revised 2018-02-14)
As a task provider, I want to view a list of tasks that I have bidded on, each with its task requester username, title, status, lowest bid so far, and my bid.&lt;/p&gt;
&lt;p&gt;US 05.03.01
As a task requester, I want to be notified of a bid on my tasks.&lt;/p&gt;
&lt;p&gt;US 05.04.01
As a task requester, I want to view a list of my tasks with status bidded, each having one or more bids.&lt;/p&gt;
&lt;p&gt;US 05.05.01
As a task requester, I want to view the bids on one of my tasks.&lt;/p&gt;
&lt;p&gt;US 05.06.01 (revised 2018-03-28)
As a task requester, I want to accept a bid on one of my tasks, setting its status to assigned, and declining any other bids on that task.&lt;/p&gt;
&lt;p&gt;US 05.07.01 (revised 2018-03-28)
As a task requester, I want to decline a bid on one of my tasks.&lt;/p&gt;
&lt;p&gt;Declining may be done by marking the bid as such or hiding it.&lt;/p&gt;
&lt;h5 id="task-assigned"&gt;Task Assigned&lt;/h5&gt;
&lt;p&gt;US 06.01.01
As a task provider, I want to view a list of tasks I am assigned, each task with its task requester username, title, status, and my accepted bid.&lt;/p&gt;
&lt;p&gt;US 06.02.01
As a task requester, I want to view a list of my tasks with status: assigned, each task with its task provider username, title, status, and accepted bid.&lt;/p&gt;
&lt;h5 id="task-done"&gt;Task Done&lt;/h5&gt;
&lt;p&gt;US 07.01.01
As a task requester, I want to set a task with status: assigned to have status: done, when it is completed.&lt;/p&gt;
&lt;p&gt;US 07.02.01 (revised 2018-03-28)
As a task requester, I want to set a task with status: assigned to have status: requested, when it is not completed and there are no other bids on it.&lt;/p&gt;
&lt;p&gt;US 07.03.01 (added 2018-03-28)
As a task requester, I want to set a task with status: assigned to have status: bidded, when it is not completed and there are other bids on it.&lt;/p&gt;
&lt;h5 id="offline-behavior"&gt;Offline behavior&lt;/h5&gt;
&lt;p&gt;US 08.01.01
As a task requester, I want to add or edit tasks while off the network, and have these changes synchronized once I regain connectivity.&lt;/p&gt;
&lt;h5 id="photographs"&gt;Photographs&lt;/h5&gt;
&lt;p&gt;US 09.01.01
As a task requester, I want to optionally attach one or more photographs as further viewable details to a task of mine.&lt;/p&gt;
&lt;p&gt;US 09.01.02 (added 2018-04-06)
As a task requester, I want the maximum number of photographs that can be attached to a task to be at least 10.&lt;/p&gt;
&lt;p&gt;US 09.02.01
As a task requester or provider, I want to view any attached photograph for a task.&lt;/p&gt;
&lt;p&gt;US 09.03.01
As a sys admin, I want each photograph to be under 65536 bytes in size.&lt;/p&gt;
&lt;h5 id="geolocation-and-maps"&gt;Geolocation and Maps&lt;/h5&gt;
&lt;p&gt;US 10.01.01
As a task requester, I want to specify a geo location on a map as further viewable details to a task of mine.&lt;/p&gt;
&lt;p&gt;US 10.02.01
As a task requester or provider, I want to view any geo location for a task, on a map.&lt;/p&gt;
&lt;p&gt;US 10.03.01
As a task provider, I want to see a map of all tasks (that have locations), with status: requested or bidded, that are within 5 km of my current location.&lt;/p&gt;
&lt;h5 id="wow-factor"&gt;"Wow" Factor&lt;/h5&gt;
&lt;p&gt;Non-trivial, visible requirement(s) of your choice that fit with the app, on approval from your TA. This should be decided for the initial use cases.&lt;/p&gt;
&lt;p&gt;An example could be a way to rate task providers and see their ratings. Another could be dealing with tasks (that have locations) from a map view.&lt;/p&gt;</content><category term="old_project_descriptions"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>2019 F Project Problem Description</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/old_project_descriptions/2019_F_ProjectDesc.html" rel="alternate"/><published>2024-11-04T00:00:00+05:00</published><updated>2024-11-04T00:00:00+05:00</updated><author><name>Tina Nguyen</name></author><id>tag:lums-cs360-web.github.io,2024-11-04:/lums-cs360/resources/old_project_descriptions/2019_F_ProjectDesc.html</id><summary type="html">&lt;p&gt;2019 F Project Problem Description&lt;/p&gt;</summary><content type="html">&lt;p&gt;Warning: this is subject to change!&lt;/p&gt;
&lt;p&gt;You are to design and implement a simple, attractive, and easy-to-use Android application to satisfy the follow goals. Your design must be flexible enough to allow developers to extend or migrate it.&lt;/p&gt;
&lt;p&gt;To assist in understanding the emotional states and triggers of individuals and groups, we want a mobile application that allows one to post, track, and share their moods.&lt;/p&gt;
&lt;p&gt;For university students or staff that participate in using the app, this could allow a clearer picture of their experiences, perceptions, and mental well-being in the face of challenges in academic life.&lt;/p&gt;
&lt;p&gt;Needs in (Partial) User Story Form&lt;/p&gt;
&lt;p&gt;User needs are expressed in the form of partial user stories:
As a &lt;role&gt;, I want &lt;goal&gt;.&lt;/p&gt;
&lt;p&gt;These descriptions may change to correct omissions, clarify noticed issues, and add new needs. Talk to the customer and propose options, rather than making what might be an unwarranted assumption or interpretation.&lt;/p&gt;
&lt;h5 id="moods"&gt;Moods&lt;/h5&gt;
&lt;p&gt;US 01.01.01
As a participant, I want to add a mood event to my mood history, each event with the current date and time, a required emotional state, optional reason, and optional social situation.&lt;/p&gt;
&lt;p&gt;US 01.02.01
As a participant, I want consistent emoticons and colors to depict and distinguish the emotional states in any view.&lt;/p&gt;
&lt;p&gt;US 01.03.01
As a participant, I want to view a given mood event and all its available details.&lt;/p&gt;
&lt;p&gt;US 01.04.01
As a participant, I want to edit the details of a given mood event of mine.&lt;/p&gt;
&lt;p&gt;US 01.05.01
As a participant, I want to delete a given mood event of mine.&lt;/p&gt;
&lt;h5 id="other-mood-details"&gt;Other Mood Details&lt;/h5&gt;
&lt;p&gt;US 02.01.01
As a participant, I want to express the reason why for a mood event using a brief textual explanation (no more than 20 characters or 3 words).&lt;/p&gt;
&lt;p&gt;US 02.02.01
As a participant, I want to express the reason why for a mood event using a photograph.&lt;/p&gt;
&lt;p&gt;US 02.03.01
As a participant, I want to specify the social situation for a mood event to be one of: alone, with one other person, with two to several people, or with a crowd.&lt;/p&gt;
&lt;h5 id="profile"&gt;Profile&lt;/h5&gt;
&lt;p&gt;US 03.01.01
As a user, I want a profile with a unique username.&lt;/p&gt;
&lt;h5 id="mood-history"&gt;Mood History&lt;/h5&gt;
&lt;p&gt;US 04.01.01
As a participant, I want to view as a list my mood history, sorted by date and time, in reverse chronological order (most recent coming first).&lt;/p&gt;
&lt;p&gt;US 04.02.01
As a participant, I want to filter my mood history list to show only mood events with a particular emotional state.&lt;/p&gt;
&lt;h5 id="mood-following-and-sharing"&gt;Mood Following and Sharing&lt;/h5&gt;
&lt;p&gt;US 05.01.01
As a participant, I want to ask another participant to follow their most recent mood event.&lt;/p&gt;
&lt;p&gt;US 05.02.01
As a participant, I want to grant another participant permission to follow my most recent mood event.&lt;/p&gt;
&lt;p&gt;US 05.03.01
As a participant, I want to view as a list the most recent mood events of the other participants I am granted to follow, sorted by date and time, in reverse chronological order (most recent coming first).&lt;/p&gt;
&lt;h5 id="geolocation-and-maps"&gt;Geolocation and Maps&lt;/h5&gt;
&lt;p&gt;US 06.01.01
As a participant, I want to optionally attach my current location to a mood event.&lt;/p&gt;
&lt;p&gt;US 06.02.01
As a participant, I want to see a map of the mood events (showing their emotional states) from my mood history list (that have locations).&lt;/p&gt;
&lt;p&gt;US 06.03.01
As a participant, I want to see a map of the mood events (showing their emotional states and the username) from my mood following list (that have locations).&lt;/p&gt;</content><category term="old_project_descriptions"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>2019 W Project Problem Description</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/old_project_descriptions/2019_W_ProjectDesc.html" rel="alternate"/><published>2024-11-04T00:00:00+05:00</published><updated>2024-11-04T00:00:00+05:00</updated><author><name>Tina Nguyen</name></author><id>tag:lums-cs360-web.github.io,2024-11-04:/lums-cs360/resources/old_project_descriptions/2019_W_ProjectDesc.html</id><summary type="html">&lt;p&gt;2019 W Project Problem Description&lt;/p&gt;</summary><content type="html">&lt;h3 id="project-problem-description"&gt;Project Problem Description&lt;/h3&gt;
&lt;p&gt;Warning: This is subject to change!&lt;/p&gt;
&lt;p&gt;You are to design and implement a simple, attractive, and easy-to-use Android application to satisfy the following goals. Your design must be flexible enough to allow developers to extend or migrate it.&lt;/p&gt;
&lt;p&gt;We want a mobile application that allows owners to record the books they have and loan them to borrowers.&lt;/p&gt;
&lt;p&gt;In general, a user can be both an owner of their own books and a borrower of someone else's books. A borrower can borrow an available book by making a request for it. The owner can accept such a request. When the book is handed over, the book becomes borrowed. The owner can denote when a borrowed book is returned and available again.&lt;/p&gt;
&lt;p&gt;Needs in (Partial) User Story Form&lt;/p&gt;
&lt;p&gt;User needs are expressed in the form of partial user stories:&lt;/p&gt;
&lt;p&gt;As a &lt;role&gt;, I want &lt;goal&gt;.&lt;/p&gt;
&lt;p&gt;These descriptions may change to correct omissions and clarify noticed issues. New requirements will be introduced for the final project part.&lt;/p&gt;
&lt;h5 id="books"&gt;Books&lt;/h5&gt;
&lt;p&gt;US 01.01.01
As an owner, I want to add a book in my books, each denoted with a clear, suitable description (at least title, author, and ISBN).&lt;/p&gt;
&lt;p&gt;US 01.02.01
As an owner, I want the book description by scanning it off the book (at least the ISBN).&lt;/p&gt;
&lt;p&gt;US 01.03.01
As an owner or borrower, I want a book to have a status of one of: available, requested, accepted, or borrowed.&lt;/p&gt;
&lt;p&gt;US 01.04.01
As an owner, I want to view a list of all my books, and their descriptions, statuses, and current borrowers.&lt;/p&gt;
&lt;p&gt;US 01.05.01
As an owner, I want to view a list of all my books, filtered by status.&lt;/p&gt;
&lt;p&gt;US 01.06.01
As an owner, I want to view and edit a book description in my books.&lt;/p&gt;
&lt;p&gt;US 01.07.01
As an owner, I want to delete a book in my books.&lt;/p&gt;
&lt;h5 id="user-profile"&gt;User profile&lt;/h5&gt;
&lt;p&gt;US 02.01.01
As an owner or borrower, I want a profile with a unique username and my contact information.&lt;/p&gt;
&lt;p&gt;US 02.02.01
As an owner or borrower, I want to edit the contact information in my profile.&lt;/p&gt;
&lt;p&gt;US 02.03.01
As an owner or borrower, I want to retrieve and show the profile of a presented username.&lt;/p&gt;
&lt;h5 id="searching"&gt;Searching&lt;/h5&gt;
&lt;p&gt;US 03.01.01
As a borrower, I want to specify a set of keywords, and search for all books that are not currently accepted or borrowed whose description contains all the keywords.&lt;/p&gt;
&lt;p&gt;US 03.02.01
As a borrower, I want search results to show each book not currently accepted or borrowed with its description, owner username, and status.&lt;/p&gt;
&lt;h5 id="requesting"&gt;Requesting&lt;/h5&gt;
&lt;p&gt;US 04.01.01
As a borrower, I want to request a book that is not currently accepted or borrowed.&lt;/p&gt;
&lt;p&gt;US 04.02.01
As a borrower, I want to view a list of books I have requested, each book with its description, and owner username.&lt;/p&gt;
&lt;p&gt;US 04.03.01
As an owner, I want to be notified of a request.&lt;/p&gt;
&lt;p&gt;US 04.04.01
As an owner, I want to view all the requests on one of my books.&lt;/p&gt;
&lt;h5 id="accepting"&gt;Accepting&lt;/h5&gt;
&lt;p&gt;US 05.01.01
As an owner, I want to accept a request on one of my books. (Any other requests are declined.)&lt;/p&gt;
&lt;p&gt;US 05.02.01
As an owner, I want to decline a request on one of my books.&lt;/p&gt;
&lt;p&gt;US 05.03.01
As a borrower, I want to be notified of an accepted request.&lt;/p&gt;
&lt;p&gt;US 05.04.01
As a borrower, I want to view a list of books I have requested that are accepted, each book with its description, and owner username.&lt;/p&gt;
&lt;h5 id="borrowing"&gt;Borrowing&lt;/h5&gt;
&lt;p&gt;US 06.01.01
As an owner, I want to hand over a book by scanning the book ISBN code and denoting the book as borrowed.&lt;/p&gt;
&lt;p&gt;US 06.02.01
As a borrower, I want to receive an accepted book by scanning the book ISBN code to confirm I have borrowed it.&lt;/p&gt;
&lt;p&gt;US 06.03.01
As a borrower, I want to view a list of books I am borrowing, each book with its description and owner username. &lt;/p&gt;
&lt;h5 id="returning"&gt;Returning&lt;/h5&gt;
&lt;p&gt;US 07.01.01
As a borrower, I want to hand over a book I borrowed by scanning the book ISBN code to denote the book as available.&lt;/p&gt;
&lt;p&gt;US 07.02.01
As an owner, I want to receive a returned book by scanning the book ISBN code to confirm I have it available.&lt;/p&gt;
&lt;h5 id="photographs"&gt;Photographs&lt;/h5&gt;
&lt;p&gt;US 08.01.01
As an owner, I want to optionally attach a photograph to a book of mine.&lt;/p&gt;
&lt;p&gt;US 08.02.01
As an owner, I want to delete any attached photograph for a book of mine.&lt;/p&gt;
&lt;p&gt;US 08.03.01
As an owner or borrower, I want to view any attached photograph for a book.&lt;/p&gt;
&lt;h5 id="location"&gt;Location&lt;/h5&gt;
&lt;p&gt;US 09.01.01
As an owner, I want to specify a geo location on a map of where to receive a book when I accept a request on the book.&lt;/p&gt;
&lt;p&gt;US 09.02.01
As a borrower, I want to view the geo location of where to receive a book I will be borrowing.&lt;/p&gt;
&lt;h5 id="wow"&gt;"Wow"&lt;/h5&gt;
&lt;p&gt;Non-trivial requirement(s) on approval from your TA.&lt;/p&gt;</content><category term="old_project_descriptions"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>2020 F Project Problem Description</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/old_project_descriptions/2020_F_ProjectDesc.html" rel="alternate"/><published>2024-11-04T00:00:00+05:00</published><updated>2024-11-04T00:00:00+05:00</updated><author><name>Tina Nguyen</name></author><id>tag:lums-cs360-web.github.io,2024-11-04:/lums-cs360/resources/old_project_descriptions/2020_F_ProjectDesc.html</id><summary type="html">&lt;p&gt;2020 F Project Problem Description&lt;/p&gt;</summary><content type="html">&lt;p&gt;Warning: This is subject to change!&lt;/p&gt;
&lt;p&gt;You are to design and implement a simple, attractive, and easy-to-use Android application to satisfy the following goals. Your design must be flexible enough to allow developers to extend or migrate it.&lt;/p&gt;
&lt;p&gt;We want a mobile application that allows owners to record the books they have and loan them to borrowers.&lt;/p&gt;
&lt;p&gt;In general, a user can be both an owner of their own books and a borrower of someone else's books. A borrower can borrow an available book by making a request for it. The owner can accept such a request. When the book is handed over, the book becomes borrowed. The owner can denote when a borrowed book is returned and available again.&lt;/p&gt;
&lt;p&gt;Needs in (Partial) User Story Form&lt;/p&gt;
&lt;p&gt;User needs are expressed in the form of partial user stories:&lt;/p&gt;
&lt;p&gt;As a &lt;role&gt;, I want &lt;goal&gt;.&lt;/p&gt;
&lt;p&gt;These descriptions may change to correct omissions and clarify noticed issues. New requirements will be introduced for the final project part.&lt;/p&gt;
&lt;h5 id="books"&gt;Books&lt;/h5&gt;
&lt;p&gt;US 01.01.01
As an owner, I want to add a book in my books, each denoted with a clear, suitable description (at least title, author, and ISBN).&lt;/p&gt;
&lt;p&gt;US 01.02.01
As an owner, I want the book description by scanning it off the book (at least the ISBN).&lt;/p&gt;
&lt;p&gt;US 01.03.01
As an owner or borrower, I want a book to have a status to be one of: available, requested, accepted, or borrowed.&lt;/p&gt;
&lt;p&gt;US 01.04.01
As an owner, I want to view a list of all my books, and their descriptions, statuses, and current borrowers.&lt;/p&gt;
&lt;p&gt;US 01.05.01
As an owner, I want to view a list of all my books, filtered by status.&lt;/p&gt;
&lt;p&gt;US 01.06.01
As an owner, I want to view and edit a book description in my books.&lt;/p&gt;
&lt;p&gt;US 01.07.01
As an owner, I want to delete a book in my books.&lt;/p&gt;
&lt;h5 id="user-profile"&gt;User profile&lt;/h5&gt;
&lt;p&gt;US 02.01.01
As an owner or borrower, I want a profile with a unique username and my contact information.&lt;/p&gt;
&lt;p&gt;US 02.02.01
As an owner or borrower, I want to edit the contact information in my profile.&lt;/p&gt;
&lt;p&gt;US 02.03.01
As an owner or borrower, I want to retrieve and show the profile of a presented username.&lt;/p&gt;
&lt;h5 id="searching"&gt;Searching&lt;/h5&gt;
&lt;p&gt;US 03.01.01
As a borrower, I want to specify a keyword, and search for all books that are not currently accepted or borrowed whose description contains the keyword.&lt;/p&gt;
&lt;p&gt;US 03.02.01
As a borrower, I want search results to show each book with its description, owner username, and status.&lt;/p&gt;
&lt;h5 id="requesting"&gt;Requesting&lt;/h5&gt;
&lt;p&gt;US 04.01.01
As a borrower, I want to request a book that is not currently accepted or borrowed.&lt;/p&gt;
&lt;p&gt;US 04.02.01
As a borrower, I want to view a list of books I have requested, each book with its description, owner username, and status.&lt;/p&gt;
&lt;p&gt;US 04.03.01
As an owner, I want to be notified of a request.&lt;/p&gt;
&lt;p&gt;US 04.04.01
As an owner, I want to view all the requests on one of my books.&lt;/p&gt;
&lt;h5 id="accepting"&gt;Accepting&lt;/h5&gt;
&lt;p&gt;US 05.01.01
As an owner, I want to accept a request on one of my books. (Any other requests on the book are declined.)&lt;/p&gt;
&lt;p&gt;US 05.02.01
As an owner, I want to decline a request on one of my books.&lt;/p&gt;
&lt;p&gt;US 05.03.01
As a borrower, I want to be notified of an accepted request.&lt;/p&gt;
&lt;p&gt;US 05.04.01
As a borrower, I want to view a list of books I have requested that are accepted, each book with its description, and owner username.&lt;/p&gt;
&lt;h5 id="borrowing"&gt;Borrowing&lt;/h5&gt;
&lt;p&gt;US 06.01.01
As an owner, I want to hand over a book by scanning the book ISBN code and denoting the book as borrowed.&lt;/p&gt;
&lt;p&gt;US 06.02.01
As a borrower, I want to receive an accepted book by scanning the book ISBN code to confirm I have borrowed it.&lt;/p&gt;
&lt;p&gt;US 06.03.01
As a borrower, I want to view a list of books I am borrowing, each book with its description and owner username. &lt;/p&gt;
&lt;h5 id="returning"&gt;Returning&lt;/h5&gt;
&lt;p&gt;US 07.01.01
As a borrower, I want to hand over a book I borrowed by scanning the book ISBN code to denote the book as available.&lt;/p&gt;
&lt;p&gt;US 07.02.01
As an owner, I want to receive a returned book by scanning the book ISBN code to confirm I have it available.&lt;/p&gt;
&lt;h5 id="photographs"&gt;Photographs&lt;/h5&gt;
&lt;p&gt;US 08.01.01
As an owner, I want to optionally attach a photograph to a book of mine.&lt;/p&gt;
&lt;p&gt;US 08.02.01
As an owner, I want to delete any attached photograph for a book of mine.&lt;/p&gt;
&lt;p&gt;US 08.03.01
As an owner or borrower, I want to view any attached photograph for a book.&lt;/p&gt;
&lt;h5 id="location"&gt;Location&lt;/h5&gt;
&lt;p&gt;US 09.01.01
As an owner, I want to specify a geo location on a map of where to receive a book when I accept a request on the book.&lt;/p&gt;
&lt;p&gt;US 09.02.01
As a borrower, I want to view the geo location of where to receive a book I will be borrowing.&lt;/p&gt;</content><category term="old_project_descriptions"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>2020 W Project Problem Description</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/old_project_descriptions/2020_W_ProjectDesc.html" rel="alternate"/><published>2024-11-04T00:00:00+05:00</published><updated>2024-11-04T00:00:00+05:00</updated><author><name>Tina Nguyen</name></author><id>tag:lums-cs360-web.github.io,2024-11-04:/lums-cs360/resources/old_project_descriptions/2020_W_ProjectDesc.html</id><summary type="html">&lt;p&gt;2020 W Project Problem Description&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;strong&gt;Warning: This is subject to change!&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id="you-are-to-design-and-implement-a-simple-attractive-and-easy-to-use-android-application-to-satisfy-the-following-goals-your-design-must-be-flexible-enough-to-allow-developers-to-extend-or-migrate-it"&gt;You are to design and implement a simple, attractive, and easy-to-use Android application to satisfy the following goals. Your design must be flexible enough to allow developers to extend or migrate it.&lt;/h4&gt;
&lt;p&gt;We want a mobile application that allows drivers to search for open and recent ride requests, and for riders to post requests for rides. Riders will describe the start and end of their ride and their suggested payment. Drivers will browse for nearby requests and accept ride requests that they are willing to fulfil. We're going to use the new baloney currency QR-Bucks! It's like an IOU but in QR code form!&lt;/p&gt;
&lt;h4 id="needs-in-partial-user-story-form"&gt;Needs in (Partial) User Story Form&lt;/h4&gt;
&lt;p&gt;User needs are expressed in the form of partial user stories:
&lt;strong&gt;As a &lt;role&gt;, I want &lt;goal&gt;.&lt;/strong&gt;
These descriptions may change to correct omissions and clarify noticed issues. New requirements will be introduced for the final project part.&lt;/p&gt;
&lt;h5 id="requests"&gt;Requests&lt;/h5&gt;
&lt;p&gt;US 01.01.01
As a rider, I want to request rides between two locations.
US 01.02.01
As a rider, I want to see current request I have open.
US 01.03.01
As a rider, I want to be notified if my request is accepted.
US 01.04.01
As a rider, I want to cancel requests.
US 01.05.01
As a rider, I want to be able to phone or email the driver who accepted a request.
US 01.06.01
As a rider, I want an estimate of a fair fare to offer to drivers and I should be able to offer more.
US 01.07.01
As a rider, I want to confirm the completion of a request and enable payment.&lt;/p&gt;
&lt;p&gt;US 01.08.01
As a rider, I want to cancel a ride before the rider picks me up.
US 1.10.01
As a rider, I want to see the driver's profile and ratings.&lt;/p&gt;
&lt;p&gt;US 1.11.01
As a rider, I want to rate a driver for his/her service thumbs up or thumbs down.&lt;/p&gt;
&lt;h5 id="status"&gt;Status&lt;/h5&gt;
&lt;p&gt;US 02.01.01
As a rider or driver, I want to see the status of a request that I am involved in
User profile
US 03.01.01
As a user, I want a profile with a unique username and my contact information.
US 03.02.01
As a user, I want to edit the contact information in my profile.
US 03.03.01
As a user, I want to, when a username is presented for a thing, retrieve and show its contact information.&lt;/p&gt;
&lt;h5 id="searching"&gt;Searching&lt;/h5&gt;
&lt;p&gt;US 04.01.01
As a driver, I want to browse and search for open requests by geo-location.&lt;/p&gt;
&lt;h5 id="accepting"&gt;Accepting&lt;/h5&gt;
&lt;p&gt;US 05.01.01
As a driver,  I want to accept a request I agree with and accept that offered payment upon completion.
US 05.02.01
As a driver, I want to view the current active request.
US 05.03.01
As a driver, I want to be notified if my ride offer was accepted.&lt;/p&gt;
&lt;h5 id="offline-behavior"&gt;Offline behavior&lt;/h5&gt;
&lt;p&gt;US 06.01.01
As an driver, I want to see requests that I already accepted while offline.
US 06.02.01
As a rider, I want to see the current request, even if I am offline.&lt;/p&gt;
&lt;h5 id="location"&gt;Location&lt;/h5&gt;
&lt;p&gt;US 07.01.01
As a rider, I want to specify a start and end geo locations on a map for a request.
US 07.02.01
As a driver, I want to view start and end geo locations on a map for a request.&lt;/p&gt;
&lt;h5 id="payment"&gt;Payment&lt;/h5&gt;
&lt;p&gt;US 08.01.01
As a rider I wish to generate a QR-Bucks QR Code for my driver to scan to pay them.
US 08.02.01
As a driver I want to scan my rider's QR-Bucks to get paid!&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Note: QR-Bucks do not exist yet, please enable the generation and scanning of QR-Bucks for payment. It can be dummy values like "Abram owes me $10.00"&lt;/p&gt;</content><category term="old_project_descriptions"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>2021 F Project Problem Description</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/old_project_descriptions/2021_F_ProjectDesc.html" rel="alternate"/><published>2024-11-04T00:00:00+05:00</published><updated>2024-11-04T00:00:00+05:00</updated><author><name>Tina Nguyen</name></author><id>tag:lums-cs360-web.github.io,2024-11-04:/lums-cs360/resources/old_project_descriptions/2021_F_ProjectDesc.html</id><summary type="html">&lt;p&gt;2021 F Project Problem Description&lt;/p&gt;</summary><content type="html">&lt;p&gt;You are to design and implement a simple, attractive, and easy-to-use Android application to satisfy the follow goals. Your design must be flexible enough to allow developers to extend or migrate it.&lt;/p&gt;
&lt;p&gt;To assist in forming good habits, we want a mobile application that allows one to track, encourage, and share their habits. Recurring habits could be, for example, "write a joke", "eat breakfast", "exercise dog", "call family", and "no car accident". The intent is to make such habits: regular (e.g., daily), unbroken (so missed habit events are noted), and shared (so there's public pressure not to miss).&lt;/p&gt;
&lt;h5 id="needs-in-partial-user-story-form"&gt;Needs in (Partial) User Story Form&lt;/h5&gt;
&lt;p&gt;User needs are expressed in the form of partial user stories:
As a &lt;role&gt;, I want &lt;goal&gt;.&lt;/p&gt;
&lt;p&gt;These descriptions may change to correct omissions and clarify noticed issues. Talk to the customer and propose options, rather than making what might be an unwarranted assumption or interpretation.&lt;/p&gt;
&lt;h5 id="habits"&gt;Habits&lt;/h5&gt;
&lt;p&gt;US 01.01.01 [updated]
As a doer, I want to add a habit, giving it a brief title, reason, date to start, and whether it is public or private.&lt;/p&gt;
&lt;p&gt;US 01.02.01
As a doer, I want a habit to have a plan for what days of the week it should regularly occur.&lt;/p&gt;
&lt;p&gt;US 01.03.01
As a doer, I want to view a given habit and its details.&lt;/p&gt;
&lt;p&gt;US 01.04.01
As a doer, I want to edit the details of a habit of mine.&lt;/p&gt;
&lt;p&gt;US 01.05.01 [updated]
As a doer, I want to delete a habit of mine, and any corresponding habit events.&lt;/p&gt;
&lt;p&gt;US 01.06.01
As a doer, I want a habit title to be up to 20 characters and habit reason to be up to 30 characters.&lt;/p&gt;
&lt;p&gt;US 01.07.01
As a doer, I want to see what habits I need to do today.&lt;/p&gt;
&lt;p&gt;US 01.08.01
As a doer, I want to see a list of all my habits.&lt;/p&gt;
&lt;p&gt;US 01.08.02 [new]
As a doer, I want to manually reorder habits on my list of habits.&lt;/p&gt;
&lt;p&gt;US 01.09.01
As a doer, I want for each habit on the list, a visual indicator to show how closely I am following its plan over time.&lt;/p&gt;
&lt;h5 id="habit-events"&gt;Habit Events&lt;/h5&gt;
&lt;p&gt;US 02.01.01
As a doer, I want to denote a habit event when I have done a habit as planned.&lt;/p&gt;
&lt;p&gt;US 02.02.01
As a doer, I want a habit event to have an optional comment of up to 20 characters.&lt;/p&gt;
&lt;p&gt;US 02.03.01
As a doer, I want a habit event to have an optional photograph to record what happened.&lt;/p&gt;
&lt;p&gt;US 02.03.02 [new]
As a doer, I want the photograph for a habit event to be taken with the camera within the app.&lt;/p&gt;
&lt;p&gt;US 02.04.01
As a doer, I want to view a given habit event and all its available details.&lt;/p&gt;
&lt;p&gt;US 02.05.01
As a doer, I want to edit the details of a habit event of mine.&lt;/p&gt;
&lt;p&gt;US 02.06.01
As a doer, I want to delete a habit event of mine.&lt;/p&gt;
&lt;h5 id="profile"&gt;Profile&lt;/h5&gt;
&lt;p&gt;US 03.01.01
As a doer, I want to be uniquely identifiable in the system.&lt;/p&gt;
&lt;h5 id="habit-following-and-sharing"&gt;Habit Following and Sharing&lt;/h5&gt;
&lt;p&gt;US 05.01.01 [updated]
As a doer, I want to ask another doer to follow all their public habits.&lt;/p&gt;
&lt;p&gt;US 05.02.01 [updated]
As a doer, I want to grant or deny another doer permission to follow all my public habits.&lt;/p&gt;
&lt;p&gt;US 05.03.01 [updated]
As a doer, I want to view the public habits and visual indicators of the other doers I am granted to follow.&lt;/p&gt;
&lt;h5 id="geolocation-and-maps"&gt;Geolocation and Maps&lt;/h5&gt;
&lt;p&gt;US 06.01.01 [updated]
As a doer, I want a habit event to have an optional location to record where it happened.&lt;/p&gt;
&lt;p&gt;US 06.01.02 [new]
As a doer, I want the location for a habit event to be specified using a map within the app, with the current phone position as the default location.&lt;/p&gt;</content><category term="old_project_descriptions"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>2021 W Project Problem Description</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/old_project_descriptions/2021_W_ProjectDesc.html" rel="alternate"/><published>2024-11-04T00:00:00+05:00</published><updated>2024-11-04T00:00:00+05:00</updated><author><name>Tina Nguyen</name></author><id>tag:lums-cs360-web.github.io,2024-11-04:/lums-cs360/resources/old_project_descriptions/2021_W_ProjectDesc.html</id><summary type="html">&lt;p&gt;2021 W Project Problem Description&lt;/p&gt;</summary><content type="html">&lt;p&gt;Warning: This is subject to change!&lt;/p&gt;
&lt;p&gt;You are to design and implement a simple, attractive, and easy-to-use Android application to satisfy the following goals. Your design must be flexible enough to allow developers to extend or migrate it.&lt;/p&gt;
&lt;p&gt;We want a mobile application that allows crowd-sourced testing of phenomona. There are 4 kinds of crowd-sourced tests: counts (how many did you see), binomial trials (pass fail), non-negative integer counts (each trial has 0 or more), measurement trials (like the temperature).&lt;/p&gt;
&lt;p&gt;Count-based tests are about how many of something a person observed, it could be blue cars. Everytime they see a blue car they add 1 to the count seen. For instance you want to crowdsource how many blue cars are seen in Edmonton.&lt;/p&gt;
&lt;p&gt;Binomial trials are trials where there's a chance to pass or fail. Users will repeat these trials and indicate pass or success. It could be a series of trials where you try to flip a water bottle upside down.&lt;/p&gt;
&lt;p&gt;Non-negative integer counts are trials where each trial results in a non-negative integer results (usually a count). Such as if I drop a carton of eggs, how many eggs survive.&lt;/p&gt;
&lt;p&gt;Measurement trials are repeated measurements and you record a decimal value of whatever was measured.&lt;/p&gt;
&lt;p&gt;A chief experimenter (owner) describes and proposes a trial, gives rules and constraints that crowd experimenters will follow when they execute the trials. The crowd experimenters will look for trials that interest them, subscribe to trials and help execute and record trials for these experiments.&lt;/p&gt;
&lt;p&gt;Needs in (Partial) User Story Form&lt;/p&gt;
&lt;p&gt;User needs are expressed in the form of partial user stories:&lt;/p&gt;
&lt;p&gt;As a &lt;role&gt;, I want &lt;goal&gt;.&lt;/p&gt;
&lt;p&gt;These descriptions may change to correct omissions and clarify noticed issues. New requirements will be introduced for the final project part.&lt;/p&gt;
&lt;h5 id="experiment"&gt;Experiment&lt;/h5&gt;
&lt;p&gt;US 01.01.01
As an owner, I want to publish an experiment with a description, a region, and a minimum number of trials.&lt;/p&gt;
&lt;p&gt;US 01.02.01
As an owner, I want to unpublish an experiment.&lt;/p&gt;
&lt;p&gt;US 01.03.01
As an owner, I want to end an experiment. This leaves the results available and public but does not allow new results to be added.&lt;/p&gt;
&lt;p&gt;US 01.04.01
As an owner or experimenter, I want to subscribe to an experiment to participate in it.&lt;/p&gt;
&lt;p&gt;US 01.05.01
As an experimenter, I want to be able to execute trials for an experiment and upload them to the experiment.&lt;/p&gt;
&lt;p&gt;US 01.08.01
As an owner, I want to ignore certain experimenters results.&lt;/p&gt;
&lt;p&gt;US 01.09.01
As an owner or experimenter, I want to observe statistics (quartiles, median, mean, stdev) about a current trials.&lt;/p&gt;
&lt;p&gt;US 01.06.01
As an owner or experimenter, I want to see histograms of the results of trials.&lt;/p&gt;
&lt;p&gt;US 01.07.01
As an owner or experimenter, I want to see plots of the results of trials over time.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;h5 id="questions"&gt;Questions&lt;/h5&gt;
&lt;p&gt;US 02.01.01
As an experimenter, I want to ask a question about an experiment.&lt;/p&gt;
&lt;p&gt;US 02.02.01
As an experimenter or owner, I want to ask to reply to questions about an experiment.&lt;/p&gt;
&lt;p&gt;US 02.03.01
As an experimenter or owner, I want to browse questions and replies about an experiment.&lt;/p&gt;
&lt;p&gt;QR Codes&lt;/p&gt;
&lt;p&gt;US 03.01.01
As an experimenter, I want to be able to generate QR codes that I can print for a specific experiment and trial result (for instance PASS for a binomial trial I subscribed to).&lt;/p&gt;
&lt;p&gt;US 03.02.01
As an experimenter, I want to be able scan QR codes to indicate success or failure, or increment counts for trials I subscribed to.&lt;/p&gt;
&lt;p&gt;US 03.03.01
As an experimenter, I want to be able to register an arbitrary bar code (such as one off of your favourite book) to act a specific experiment result for a trial.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;h5 id="user-profile"&gt;User profile&lt;/h5&gt;
&lt;p&gt;US 04.01.01
As an owner or experimenter, I want a profile with a unique username and my contact information.&lt;/p&gt;
&lt;p&gt;US 04.02.01
As an owner or experimenter, I want to edit the contact information in my profile.&lt;/p&gt;
&lt;p&gt;US 04.03.01
As an owner or experimenter, I want to retrieve and show the profile of a presented username.&lt;/p&gt;
&lt;p&gt;US 04.04.01 &lt;em&gt;new for Part 4&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;As an owner or experimenter, I do not want to log into my application using a username and password.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;h5 id="searching"&gt;Searching&lt;/h5&gt;
&lt;p&gt;US 05.01.01
As an experimenter, I want to specify a keyword, and search for all experiments that are available.&lt;/p&gt;
&lt;p&gt;US 05.02.01
As an experimenter, I want search results to show each experiment with its description, owner username, and status.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;h5 id="location"&gt;Location&lt;/h5&gt;
&lt;p&gt;US 06.01.01
As an owner, I want to specify a Geo-location is required or not for trials.&lt;/p&gt;
&lt;p&gt;US 06.02.01
As an experimenter, I want to add Geo-location to experimental trials that need it.&lt;/p&gt;
&lt;p&gt;US 06.03.01
As an experimenter, I want to be warned about geo-location trials.&lt;/p&gt;
&lt;p&gt;US 06.04.01
As an experimenter, I want to see a map of geo-locations of a geo-location enabled expirement.&lt;/p&gt;</content><category term="old_project_descriptions"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>2022 W Project Problem Description</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/old_project_descriptions/2022_W_ProjectDesc.html" rel="alternate"/><published>2024-11-04T00:00:00+05:00</published><updated>2024-11-04T00:00:00+05:00</updated><author><name>Tina Nguyen</name></author><id>tag:lums-cs360-web.github.io,2024-11-04:/lums-cs360/resources/old_project_descriptions/2022_W_ProjectDesc.html</id><summary type="html">&lt;p&gt;2022 W Project Problem Description&lt;/p&gt;</summary><content type="html">&lt;h3 id="project-problem-description"&gt;Project Problem Description&lt;/h3&gt;
&lt;p&gt;Warning: This is subject to change!&lt;/p&gt;
&lt;p&gt;You are to design and implement a simple, attractive, and easy-to-use Android application to satisfy the following goals. Your design must be flexible enough to allow developers to extend or migrate it.&lt;/p&gt;
&lt;p&gt;We want a mobile application that allows us to hunt for the coolest QR codes that score the most points. Players will run around scanning QR codes, barcodes, etc. trying to find barcodes and QR codes that give them the most points.&lt;/p&gt;
&lt;p&gt;QR codes and barcodes (scannable codes) will be hashed and the hashes they produce will be analyzed and scored. A QR code that has certain properties like repeated nibbles or bytes (hex digits) will have a higher score than a QR code that does not. We have a proposed scoring system, but the implementers are free to use a different scoring system.&lt;/p&gt;
&lt;p&gt;We want users to compete with each other for the highest scoring QR codes, the most QR codes, the highest sum of QR codes, or highest scoring QR codes in a region. &lt;/p&gt;
&lt;p&gt;When a player scans a QR code they will take a photo of what or where the QR code is and also record the geolocation of the QR code. &lt;/p&gt;
&lt;p&gt;Players can see on a map local QR codes that other players have scanned.&lt;/p&gt;
&lt;h4 id="scenario"&gt;Scenario:&lt;/h4&gt;
&lt;p&gt;I open my QRHunter app. I see a QR code in my wallet. I indicate I want to add a new QR code and I use the phone camera to add the QR code. The QR code is scored and I’m told that my QR score is 30. The system prompts me for a photo of the object I scanned. I decline since this was an ID card. I also decline geolocation because it is in my wallet. The system adds the 30 points to my total score and records a hash of the QR code. I then see some sticker on a pole. I scan it and am told it is worth 1000 points! I record the geolocation and take a photo of the pole and save it to my account. 1000 points wow. Then I see that other users have found this pole as well. So I open the map for nearby QR codes and I see something worth 10000 is 100 meters away so I’m going to head on over there!&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;h4 id="needs-in-partial-user-story-form"&gt;Needs in (Partial) User Story Form&lt;/h4&gt;
&lt;h6 id="actors"&gt;Actors:&lt;/h6&gt;
&lt;p&gt;Player: a person who plays the game&lt;/p&gt;
&lt;p&gt;Owner: the entity that owns the infrastructure that the game runs on.&lt;/p&gt;
&lt;h6 id="glossary"&gt;Glossary:&lt;/h6&gt;
&lt;p&gt;QR Code: a scannable code, either a barcode, a QR code, or other code scannable by Zebra crossing libraries or google QR code scanning libraries.&lt;/p&gt;
&lt;p&gt;User needs are expressed in the form of partial user stories:&lt;/p&gt;
&lt;p&gt;As a &lt;role&gt;, I want &lt;goal&gt;.&lt;/p&gt;
&lt;p&gt;These descriptions may change to correct omissions and clarify noticed issues. New requirements will be introduced for the final project part.&lt;/p&gt;
&lt;h6 id="player"&gt;Player&lt;/h6&gt;
&lt;p&gt;US 01.01.01&lt;/p&gt;
&lt;p&gt;As a player, I want to add new QR codes to my account.&lt;/p&gt;
&lt;p&gt;US 01.02.01&lt;/p&gt;
&lt;p&gt;As a player, I want to see what QR codes I have added to my account.&lt;/p&gt;
&lt;p&gt;US 01.0X.01&lt;/p&gt;
&lt;p&gt;As a player, I want to remove QR codes from my account.&lt;/p&gt;
&lt;p&gt;US 01.0X.01&lt;/p&gt;
&lt;p&gt;As a player, I want to see my highest and lowest scoring QR codes.&lt;/p&gt;
&lt;p&gt;US 01.0X.01&lt;/p&gt;
&lt;p&gt;As a player, I want to see the sum of scores of QR codes that I have scanned.&lt;/p&gt;
&lt;p&gt;US 01.0X.01&lt;/p&gt;
&lt;p&gt;As a player, I want to see the total number of QR codes that I have scanned.&lt;/p&gt;
&lt;p&gt;US 01.0X.01&lt;/p&gt;
&lt;p&gt;As a player, I want to see other player’s profiles&lt;/p&gt;
&lt;h6 id="game-qr-codes"&gt;Game QR Codes&lt;/h6&gt;
&lt;p&gt;US 02.0X.01&lt;/p&gt;
&lt;p&gt;As a player, I want to be able to scan QR codes and record a photo of the location or object, and the geolocation of the location or object.&lt;/p&gt;
&lt;p&gt;US 02.0X.01&lt;/p&gt;
&lt;p&gt;As a player, I want to be able to comment on QR codes.&lt;/p&gt;
&lt;p&gt;US 02.0X.01&lt;/p&gt;
&lt;p&gt;As a player, I want to be able to browse QR codes that I own. (2022-03-08: Deleted because identical to US 01.02.01)&lt;/p&gt;
&lt;p&gt;US 02.0X.01&lt;/p&gt;
&lt;p&gt;As a player, I want to be able to browse QR codes that other players have scanned.&lt;/p&gt;
&lt;p&gt;US 02.0X.01&lt;/p&gt;
&lt;p&gt;As a player, I want to see that other players have scanned the same QR code.&lt;/p&gt;
&lt;h6 id="player-qr-codes"&gt;Player QR Codes&lt;/h6&gt;
&lt;p&gt;US 03.0X.01&lt;/p&gt;
&lt;p&gt;As a player, I want to be able to generate QR codes so that other players can scan my QR code to see my game status.&lt;/p&gt;
&lt;p&gt;US 03.0X.01&lt;/p&gt;
&lt;p&gt;As a player, I want to be able to generate a QR code so that I can log in to another device with the same account. &lt;/p&gt;
&lt;h6 id="player-profile"&gt;Player profile&lt;/h6&gt;
&lt;p&gt;US 04.01.01&lt;/p&gt;
&lt;p&gt;As a player, I want a profile with a unique username and my contact information.&lt;/p&gt;
&lt;p&gt;US 04.0X.01 &lt;/p&gt;
&lt;p&gt;As a player, I do not want to log into my application using a username and password as my device can identify me.&lt;/p&gt;
&lt;h6 id="searching"&gt;Searching&lt;/h6&gt;
&lt;p&gt;US 05.01.01&lt;/p&gt;
&lt;p&gt;As a player, I want to search for other players by username.&lt;/p&gt;
&lt;p&gt;US 05.0X.01&lt;/p&gt;
&lt;p&gt;As a player, I want to search for nearby QR codes by using geolocation.&lt;/p&gt;
&lt;h6 id="location"&gt;Location&lt;/h6&gt;
&lt;p&gt;US 06.01.01&lt;/p&gt;
&lt;p&gt;As a player, I want to see a map of geo-locations of nearby QR codes.&lt;/p&gt;
&lt;h6 id="scoring"&gt;Scoring&lt;/h6&gt;
&lt;p&gt;US 07.0X.01&lt;/p&gt;
&lt;p&gt;As a player, I want to see game-wide high scores of all players.&lt;/p&gt;
&lt;p&gt;US 07.0X.01&lt;/p&gt;
&lt;p&gt;As a player, I want an estimate of my ranking for the highest scoring unique QR code.&lt;/p&gt;
&lt;p&gt;US 07.0X.01&lt;/p&gt;
&lt;p&gt;As a player, I want an estimate of my ranking for the total number of QR codes scanned.&lt;/p&gt;
&lt;p&gt;US 07.0X.01&lt;/p&gt;
&lt;p&gt;As a player, I want an estimate of my ranking for a total sum of scores of QR codes scanned.&lt;/p&gt;
&lt;h6 id="privacy"&gt;Privacy&lt;/h6&gt;
&lt;p&gt;US 08.0X.01&lt;/p&gt;
&lt;p&gt;As a player, I don’t want the actual code recorded. E.g., so I can scan and score my vaccine passport.&lt;/p&gt;
&lt;p&gt;US 08.0X.01&lt;/p&gt;
&lt;p&gt;As a player, I want to be able to decline recording geolocation for privacy reasons.&lt;/p&gt;
&lt;h6 id="owner"&gt;Owner&lt;/h6&gt;
&lt;p&gt;US 09.0X.01 &lt;/p&gt;
&lt;p&gt;As an owner, I don’t want to store big images online.&lt;/p&gt;
&lt;p&gt;US 09.0X.01 &lt;/p&gt;
&lt;p&gt;As an owner, I want to be able to delete QR codes that are bad or malicious.&lt;/p&gt;
&lt;p&gt;US 09.0X.01 &lt;/p&gt;
&lt;p&gt;As an owner, I want to be able to delete players.&lt;/p&gt;
&lt;h4 id="proposed-scoring-system"&gt;Proposed Scoring System:&lt;/h4&gt;
&lt;p&gt;First, we calculate a SHA-256 hash of the QR code contents.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;p&gt;QR code contents: &lt;strong&gt;BFG5DGW54&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Calculating SHA-256 hash:&lt;/p&gt;
&lt;p&gt;@slate:~$ echo BFG5DGW54 | sha256sum
696ce4dbd7bb57cbfe58b64f530f428b74999cb37e2ee60980490cd9552de3a6  -&lt;/p&gt;
&lt;p&gt;Then, based on the hexadecimal representation of the sha256, the score is calculated in the following way:&lt;/p&gt;
&lt;p&gt;a "0" is 1 point&lt;/p&gt;
&lt;p&gt;Many 0 in a row are multiplied by 20^(n-1) whereby n is the number of repeats&lt;/p&gt;
&lt;p&gt;00 - 20^1 - 20&lt;/p&gt;
&lt;p&gt;000 - 20^2 - 400&lt;/p&gt;
&lt;p&gt;0000 - 20^3 - 8000&lt;/p&gt;
&lt;p&gt;Same for other numbers&lt;/p&gt;
&lt;p&gt;11 - 1&lt;/p&gt;
&lt;p&gt;111 - 1&lt;/p&gt;
&lt;p&gt;1111 - 1&lt;/p&gt;
&lt;p&gt;22 - 2&lt;/p&gt;
&lt;p&gt;222 - 4&lt;/p&gt;
&lt;p&gt;2222 - 8&lt;/p&gt;
&lt;p&gt;99 - 9&lt;/p&gt;
&lt;p&gt;999 - 81&lt;/p&gt;
&lt;p&gt;aa - 10&lt;/p&gt;
&lt;p&gt;aaa - 100&lt;/p&gt;
&lt;p&gt;ff - 15&lt;/p&gt;
&lt;p&gt;fff - 225&lt;/p&gt;
&lt;p&gt;So the best QR code would be made of all 0s or higher digits&lt;/p&gt;
&lt;p&gt;For the QR code above&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;696ce4dbd7bb57cbfe58b64f530f428b74999cb37e2ee60980490cd9552de3a6&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let’s find the repeated digits&lt;/p&gt;
&lt;p&gt;echo BFG5DGW54 | sha256sum | perl -lpe 'print "$1$2" while /([0-9a-f])(\1+)/g'&lt;/p&gt;
&lt;p&gt;bb
999
ee
55&lt;/p&gt;
&lt;p&gt;And calculate the score&lt;/p&gt;
&lt;p&gt;bb - 11&lt;/p&gt;
&lt;p&gt;999 - 9^2 - 81&lt;/p&gt;
&lt;p&gt;ee - 14&lt;/p&gt;
&lt;p&gt;55 - 5&lt;/p&gt;
&lt;p&gt;Score: 11 + 81 + 14 + 5 = 111&lt;/p&gt;
&lt;h5 id="changelog"&gt;Changelog:&lt;/h5&gt;
&lt;p&gt;2022-03-08: Deleted US 02.0X.01 ("As a player, I want to be able to browse QR codes that I own"). Reason: identical to US 01.02.01.&lt;/p&gt;</content><category term="old_project_descriptions"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>Old Lab Notes</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/oldnotes.html" rel="alternate"/><published>2024-11-02T00:00:00+05:00</published><updated>2024-11-02T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-11-02:/lums-cs360/resources/oldnotes.html</id><summary type="html">&lt;p&gt;Old Lab Notes&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;h3 id="old-lab-notes"&gt;Old Lab Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/notes/Lab4.pdf"&gt;Lab 4 Slides (Old Version)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/notes/Lab5.pdf"&gt;Lab 5 Slides (Old Version)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/notes/Lab6Instructions.pdf"&gt;Lab 6 Instructions for Javadoc and JUnit testing (Old Version)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/notes/Lab7.pdf"&gt;Lab 7 Slides (Old Version)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/notes/Lab7Instructions.pdf"&gt;Lab 7 Instructions for Intent Testing (Old Version)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/AbdulAli/CMPUT-301-IntentTesting/blob/main/README.md"&gt;Lab 7 Coding Instructions (Old Version)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="resources"/><category term="resources"/><category term="reading"/><category term="references"/></entry><entry><title>Class Participation Exercise 18</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer18.html" rel="alternate"/><published>2024-10-24T00:00:00+05:00</published><updated>2024-10-24T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-10-24:/lums-cs360/archive/class_participation_exer18.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Class Participation Exercise 18&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Proper completion of this exercise is considered as part of course participation.&lt;/p&gt;
&lt;p&gt;Which of these code smells are signs of "bloat", i.e., code, methods, and classes that have increased to an extent that they become hard to work with.
  - [ ] comments
  - [ ] duplicated code
  - [ ] long method
  - [ ] large class
  - [ ] data classes
  - [ ] data clumps
  - [ ] large parameter list
  - [ ] divergent change
  - [ ] shotgun surgery
  - [ ] feature envy
  - [ ] inappropriate intimacy
  - [ ] message chains
  - [ ] primitive obsession
  - [ ] switch statements
  - [ ] speculative generality
  - [ ] refused bequest&lt;/p&gt;
&lt;p&gt;Which of these code smells are signs of incomplete or incorrect use of object-oriented design principles?
  - [ ] comments
  - [ ] duplicated code
  - [ ] long method
  - [ ] large class
  - [ ] data classes
  - [ ] data clumps
  - [ ] large parameter list
  - [ ] divergent change
  - [ ] shotgun surgery
  - [ ] feature envy
  - [ ] inappropriate intimacy
  - [ ] message chains
  - [ ] primitive obsession
  - [ ] switch statements
  - [ ] speculative generality
  - [ ] refused bequest&lt;/p&gt;
&lt;p&gt;Which of these code smells are signs that change is difficult and likely expensive?
  - [ ] comments
  - [ ] duplicated code
  - [ ] long method
  - [ ] large class
  - [ ] data classes
  - [ ] data clumps
  - [ ] large parameter list
  - [ ] divergent change
  - [ ] shotgun surgery
  - [ ] feature envy
  - [ ] inappropriate intimacy
  - [ ] message chains
  - [ ] primitive obsession
  - [ ] switch statements
  - [ ] speculative generality
  - [ ] refused bequest&lt;/p&gt;
&lt;p&gt;Which of these code smells are signs of something unnecessary, which if avoided would lead to cleaner, more efficient, and easier to understand code?
  - [ ] comments
  - [ ] duplicated code
  - [ ] long method
  - [ ] large class
  - [ ] data classes
  - [ ] data clumps
  - [ ] large parameter list
  - [ ] divergent change
  - [ ] shotgun surgery
  - [ ] feature envy
  - [ ] inappropriate intimacy
  - [ ] message chains
  - [ ] primitive obsession
  - [ ] switch statements
  - [ ] speculative generality
  - [ ] refused bequest&lt;/p&gt;
&lt;p&gt;Which of these code smells are signs of excessive coupling between classes?
  - [ ] comments
  - [ ] duplicated code
  - [ ] long method
  - [ ] large class
  - [ ] data classes
  - [ ] data clumps
  - [ ] large parameter list
  - [ ] divergent change
  - [ ] shotgun surgery
  - [ ] feature envy
  - [ ] inappropriate intimacy
  - [ ] message chains
  - [ ] primitive obsession
  - [ ] switch statements
  - [ ] speculative generality
  - [ ] refused bequest&lt;/p&gt;
&lt;p&gt;Consider the following piece of code:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// Order.java&lt;/span&gt;

&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;com.nq.util&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.lang.*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Order&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lineitemlist&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lineItemList&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Order&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lineitemlist&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lis&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;lineItemList&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lis&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;boolean&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;equals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;aThat&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;aThat&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;aThat&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;instanceof&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Order&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;Order&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;that&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Order&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;aThat&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;lineItemList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;that&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;lineItemList&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// writes this order object to the specified print writer&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;writeOrder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Order&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PrintWriter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pw&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// get a vector of line items&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Vector&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lineItems&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getLineItemList&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="na"&gt;getLineItems&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ------------------------------------------------------&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// calculate total&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ------------------------------------------------------&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// create an iterator for the vector&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Iterator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lineItems&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;iterator&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;lineItem&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// set total to zero&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hasNext&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lineItem&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;// calculate total for line item&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unitPrice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getUnitPrice&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qty&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getQuantity&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lineitemtotal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unitPrice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qty&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lineitemtotal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ------------------------------------------------------&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// END calculate total&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ------------------------------------------------------&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ------------------------------------------------------&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// write order&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ------------------------------------------------------&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// create an iterator for the vector&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lineItems&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;iterator&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hasNext&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lineItem&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;// calculate total for line item&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unitPrice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getUnitPrice&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qty&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getQuantity&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;productID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getProductID&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;imageID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getImageId&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lineitemtotal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unitPrice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qty&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;pw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Begin Line Item&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;pw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Product = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;productID&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;pw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Image = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;imageID&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;pw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Quantity = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qty&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;pw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Total = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lineitemtotal&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;pw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;End Line Item&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;pw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Order total = &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getTotal&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// get a vector of line items&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Vector&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lineItems&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lineItemList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getLineItems&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// create an iterator for the vector&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Iterator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lineItems&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;iterator&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;lineItem&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// set total to zero&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hasNext&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lineItem&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;iterator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;// calculate total for line item&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unitPrice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getUnitPrice&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qty&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getQuantity&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lineitemtotal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unitPrice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qty&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lineitemtotal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// lineitemlist.java&lt;/span&gt;

&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;com.nq.util&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.lang.*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;lineitemlist&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Vector&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LIList&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;setLineItems&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Vector&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lineItems&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;LIList&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lineItems&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Vector&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getLineItems&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LIList&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// lineItem.java&lt;/span&gt;

&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;com.nq.util&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.io.*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.lang.*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;lineItem&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;protected&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;productId&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ImageID&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qty&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Unitprice&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lineItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;prodID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ImageID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inQty&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;productId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;prodID&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ImageID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ImageID&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;qty&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inQty&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;setLineItems&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Vector&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lineItems&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;LineItems&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lineItems&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Vector&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getLineItems&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LineItems&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getProductID&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;productId&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getImageID&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;imageID&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getQuantity&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qty&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getUnitPrice&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Unitprice&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;setProductID&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;productId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;setImageID&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;imageID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;setQty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qty&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;qty&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qty&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;setUnitPrice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Unitprice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;What code smells are evident? For each, briefly describe its occurrence(s) in the code.&lt;/p&gt;
&lt;p&gt;Occurrence(s) of "comments" code smell:&lt;/p&gt;
&lt;p&gt;Occurrence(s) of "duplicated code" code smell:&lt;/p&gt;
&lt;p&gt;Occurrence(s) of "long method" code smell:&lt;/p&gt;
&lt;p&gt;Occurrence(s) of "large class" code smell:&lt;/p&gt;
&lt;p&gt;Occurrence(s) of "data classes" code smell:&lt;/p&gt;
&lt;p&gt;Occurrence(s) of "data clumps" code smell:&lt;/p&gt;
&lt;p&gt;Occurrence(s) of "large parameter list" code smell:&lt;/p&gt;
&lt;p&gt;Occurrence(s) of "divergent change" code smell:&lt;/p&gt;
&lt;p&gt;Occurrence(s) of "shotgun surgery" code smell:&lt;/p&gt;
&lt;p&gt;Occurrence(s) of "feature envy" code smell:&lt;/p&gt;
&lt;p&gt;Occurrence(s) of "inappropriate intimacy" code smell:&lt;/p&gt;
&lt;p&gt;Occurrence(s) of "message chains" code smell:&lt;/p&gt;
&lt;p&gt;Occurrence(s) of "primitive obsession" code smell:&lt;/p&gt;
&lt;p&gt;Occurrence(s) of "switch statements" code smell:&lt;/p&gt;
&lt;p&gt;Occurrence(s) of "speculative generality" code smell:&lt;/p&gt;
&lt;p&gt;Occurrence(s) of "refused bequest" code smell:&lt;/p&gt;
&lt;p&gt;Other occurrence(s) of inconsistent or nonstandard coding:&lt;/p&gt;</content><category term="archive"/><category term="resources"/><category term="participation"/><category term="references"/><category term="practice"/></entry><entry><title>Practice w23hm2q1</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hm2q1.html" rel="alternate"/><published>2024-10-18T00:00:00+05:00</published><updated>2024-10-18T00:00:00+05:00</updated><author><name>Abram Hindle</name></author><id>tag:lums-cs360-web.github.io,2024-10-18:/lums-cs360/resources/practice/w23hm2q1.html</id><summary type="html">&lt;p&gt;Practice Exam Question&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;h5 id="crc-cards"&gt;CRC Cards&lt;/h5&gt;
&lt;p&gt;Engage in Object-Oriented Analysis and read the following scenario paragraph and pull out potential nouns that may lead to classes and verbs may lead to methods or relationships.&lt;/p&gt;
&lt;p&gt;Make CRC cards to model each meaningful class relevant to the problem and scenario. Collaborators and responsibilities must be described.&lt;/p&gt;
&lt;p&gt;You may use plain text, and separate the cards by a blank line. The following format is recommended:&lt;/p&gt;
&lt;p&gt;Class: X&lt;/p&gt;
&lt;p&gt;Collaborator: Y&lt;/p&gt;
&lt;p&gt;Collaborator: Z&lt;/p&gt;
&lt;p&gt;Responsibility: K&lt;/p&gt;
&lt;p&gt;Responsibility: L&lt;/p&gt;
&lt;p&gt;Responsibility: M&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I want to track my tea collection. I collect tea. I use TeaBox app to track my tea and to make trades of tea with other users: I propose a trade and if the other player accepts then we email each other. Some teas cannot be consumed if they are too old, so I need to be warned when tea in my collection needs to be consumed. Some teas are meant to age and I don’t need warnings but I need to know their age. When I completely consume a tea, it should be removed from the active collection into the archived collection, as I would like to keep a record of past teas.&lt;/strong&gt;&lt;/p&gt;</content><category term="practice"/><category term="resources"/><category term="reading"/><category term="references"/><category term="videos"/><category term="practice"/><category term="exams"/></entry><entry><title>Practice w23hm2q2</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hm2q2.html" rel="alternate"/><published>2024-10-18T00:00:00+05:00</published><updated>2024-10-18T00:00:00+05:00</updated><author><name>Abram Hindle</name></author><id>tag:lums-cs360-web.github.io,2024-10-18:/lums-cs360/resources/practice/w23hm2q2.html</id><summary type="html">&lt;p&gt;Practice Exam Question&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;h5 id="model-view-uml"&gt;Model-View (UML)&lt;/h5&gt;
&lt;p&gt;Interpret the Java code below. It represents a pressure cooker, like the instant-pot. It’s a device that heats up food while under pressure. It provides an API to monitor the pressure and temperature of the pressure cooker. Currently class PressureCooker monitors pressure and temperature, draws a pressure gauge, graphs pressure over time, and draws a thermometer of the temperature. We want to add a temperature graph. Unfortunately we seem to be making this class too big.&lt;/p&gt;
&lt;p&gt;Refactor/restructure this code AS A UML CLASS DIAGRAM OF RESTRUCTURED CODE to implement the Model-View pattern (variation of the MVC pattern, but without a dedicated Controller). Separate out models and views, and add new views as necessary to address the new features that were asked for. Explicitly improve cohesion with your restructuring of the code. You can make new classes and interfaces, you can move methods, rename methods, and make new methods.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add temperature graph&lt;/li&gt;
&lt;li&gt;Restructure into MVC using just models and views&lt;/li&gt;
&lt;li&gt;Improve Cohesion&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On the diagram, CLEARLY LABEL which class(es) represents the Model and the View components. You do NOT need to have a Controller.&lt;/p&gt;
&lt;p&gt;Draw a well-designed UML class diagram to represent this information. Provide the basic abstractions, attributes, methods, relationships, multiplicities, and navigabilities as appropriate. "..." means much code is omitted.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PressureCooker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pressure&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LinkedList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Double&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pastPressures&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;currentPressure&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pressure&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="cm"&gt;/* called by the hardware driver */&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;protected&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;setPressure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;pastPressures&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Double&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;valueOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pressure&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;pressure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;draw&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// drawPressureGauge draws a pressure gauge based on the&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// current value of pressure&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;drawPressureGauge&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="cm"&gt;/* ... */&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// drawPressureGraph draws a plot of pressure over time.&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;drawPressureGraph&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="cm"&gt;/* ... */&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// drawThermometer draws a thermometer representing the&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// temperature&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;drawThermometer&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="cm"&gt;/* ... */&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;draw&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;drawPressureGauge&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;drawPressureGraph&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;drawThermometer&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="practice"/><category term="resources"/><category term="reading"/><category term="references"/><category term="videos"/><category term="practice"/><category term="exams"/></entry><entry><title>A1/A2 20th September Class Exercise</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer_sept20.html" rel="alternate"/><published>2024-10-17T00:00:00+05:00</published><updated>2024-10-17T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-10-17:/lums-cs360/archive/class_participation_exer_sept20.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Class Participation Exercise Sept 20&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Based on the UML, write some Java classes that implement the structure described by the UML. First, implement the class structure. Then add attributes/methods to each class for the relationships (association/aggregation/composition) that enforce the multiplicities. The fields and methods are missing from the UML, but you need to add code to each class for the methods and attributes shown in the relationships. If you have time, you can add other reasonable methods and attributes as well.&lt;/p&gt;
&lt;div style="text-align: center; margin: 20px;"&gt;
    &lt;img src="https://lums-cs360-web.github.io/lums-cs360/archive/sept20exer.png" alt="Participation Exercise Image" 
    style="width: 800px;"&gt;
&lt;/div&gt;

&lt;p&gt;Add your name and your partner's name (if you have one) to the code. If you don't add your name, you will receive a zero.  &lt;/p&gt;
&lt;p&gt;Either upload your java code as a single file or take a picture or screenshot and upload it.&lt;br&gt;
- &lt;a href="https://lums-cs360-web.github.io/lums-cs360/archive/car_exer_sept20.pdf"&gt;car.pdf&lt;/a&gt;&lt;/p&gt;</content><category term="archive"/><category term="resources"/><category term="reading"/><category term="references"/><category term="practice"/></entry><entry><title>A1/A2 2nd October Class Exercise</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer_oct2.html" rel="alternate"/><published>2024-10-17T00:00:00+05:00</published><updated>2024-10-17T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-10-17:/lums-cs360/archive/class_participation_exer_oct2.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Class Participation Exercise Oct 2&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The Java code below is software for a tiny sound recorder used by spies. It has a physical hardware counter display to show how much recording time is left and a button that starts it recording and stops it.&lt;br&gt;
Refactor/Restructure this single class into MVC classes as a UML diagram. You do not need to diagram the original code, you only need to make a UML class diagram for your new MVC version of the code. Only refactor the code shown. You do not need to include the TimeCounter or Microphone classes in your UML, because they are static hardware that you cannot change or reprogram.&lt;br&gt;
On the diagram, clearly label which classes represent model, view, and controller. Your UML class diagram should have all the basic abstractions, attributes, methods, relationships, multiplicities, and navigabilities as appropriate. “...” means much code is omitted.&lt;br&gt;
Use the “active model” type of MVC that we discussed in class: the one that uses the observer pattern.&lt;br&gt;
Do not submit Java, submit UML.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SpyCorder&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;final&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;boolean&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Sounds&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;recording&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SpyCorder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;storage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;runLoop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;runLoop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;recording&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Microphone&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;showRemaining&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;buttonPressed&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;showRemaining&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;TimeCounter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;show&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;storage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;recording&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Add your name and your partner's name (if you have one) to the diagram. If you don't, you won't get credit.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Upload a screenshot. If you worked in a pair, get the screenshot from your partner and upload the same screenshot.&lt;/p&gt;
&lt;p&gt;You can screenshot a diagrammer of your choice, or draw it on paper and take a photo.
Here's a handy diagrammer online: https://app.diagrams.net/ IF that one doesn't work for you, try a different one.&lt;/p&gt;</content><category term="archive"/><category term="resources"/><category term="reading"/><category term="references"/><category term="practice"/></entry><entry><title>A1/A2 Sept 23rd Class Exercise</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer_sept23.html" rel="alternate"/><published>2024-10-17T00:00:00+05:00</published><updated>2024-10-17T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-10-17:/lums-cs360/archive/class_participation_exer_sept23.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Class Participation Exercise Sept 23&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Based on the Java code, design a UML class diagram that represents the structure of this these classes. Pay special attention to the relationships and their multiplicities (the 1 or 0..&lt;em&gt; or 1..&lt;/em&gt; etc.).&lt;/p&gt;
&lt;p&gt;Add your name and your partner's name (if you have one) to the diagram.
&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Upload a screenshot. If you worked in a pair, get the screenshot from your partner and upload the same screenshot.
&lt;br&gt;&lt;/p&gt;
&lt;p&gt;You can screenshot a diagrammer of your choice, or draw it on paper and take a photo.&lt;/p&gt;
&lt;p&gt;Do not change file extension without converting in a conversion application, you will make the file unreadable by eclass and get a zero. &lt;strong&gt;For example, renaming a file from .heif or .heic to .png will make it unreadable and you will get a zero.&lt;/strong&gt; Instead, open it in a conversion tool like preview and export it as a different file format.&lt;/p&gt;
&lt;p&gt;Here's a handy diagrammer online: https://app.diagrams.net/ IF that one doesn't work for you, try a different one. I use umlet personally, which you have to download and install. https://www.umlet.com/&lt;/p&gt;
&lt;p&gt;Here's the Java code:
&lt;a href="https://lums-cs360-web.github.io/lums-cs360/archive/class_par_sept23_code.zip"&gt;code&lt;/a&gt;&lt;/p&gt;</content><category term="archive"/><category term="resources"/><category term="reading"/><category term="references"/><category term="practice"/></entry><entry><title>Class Participation Exercise 10</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer10.html" rel="alternate"/><published>2024-10-15T00:00:00+05:00</published><updated>2024-10-15T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-10-15:/lums-cs360/archive/class_participation_exer10.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Class Participation Exercise 10&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Proper completion of this exercise is considered as part of course participation. An answer will be discussed in class.&lt;/p&gt;
&lt;p&gt;You want a GPS device to disable itself temporarily if it detects it is going faster than 200 km/h. Write the code for a mock object (class MockLocation) that will allow running of bolded lines of class PersonTracker in method testTooFast of class TestPersonTracker.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PersonTracker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lastLocation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// called every second&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;updateLocation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GPSException&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lastLocation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lastLocation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;distance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;200.0&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;3600&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;// 200 km/h in m/s&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;GPS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getGPS&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="na"&gt;disable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="k"&gt;throw&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GPSException&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Too Fast!&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;lastLocation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;Location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// distance in metres&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;distance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;TestPersonTracker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;extends&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TestCase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;testTooFast&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;PersonTracker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PersonTracker&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MockLocation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;updateLocation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;updateLocation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;fail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;This was supposed to throw exception.&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GPSException&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// exception was properly thrown&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;State any assumptions. You should try to avoid modifying the given code.&lt;/p&gt;
&lt;p&gt;Submit your Java code in a zip file.&lt;/p&gt;</content><category term="archive"/><category term="resources"/><category term="reading"/><category term="references"/><category term="practice"/></entry><entry><title>A1/A2 18th September Class Exercise</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer_sept18.html" rel="alternate"/><published>2024-10-08T00:00:00+05:00</published><updated>2024-10-08T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-10-08:/lums-cs360/archive/class_participation_exer_sept18.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Class Participation Exercise Sept 18&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Imagine a mobile application designed for the world of Dungeons &amp;amp; Dragons (D&amp;amp;D). This application serves as a tool for managing and tracking character stats, and creating and customizing D&amp;amp;D characters. It keeps track of stats such as strength, dexterity, constitution, intelligence, wisdom, and charisma.&lt;/p&gt;
&lt;p&gt;There is a spell management system. In the context of D&amp;amp;D, a spell is a magical effect conjured by a character. Each spell has specific effects, casting time, range, and duration. A spellbook is a collection of spells that a character knows and can use during gameplay. The application allows users to add or remove spells from their character’s spellbook, effectively managing their repertoire of spells.&lt;/p&gt;
&lt;p&gt;The concept of spell slots represents the energy a character has to cast spells. Each spell requires a certain level of energy, represented by the level of the spell slot. The application tracks the usage of these spell slots, helping users manage their character’s magical energy efficiently.&lt;/p&gt;
&lt;p&gt;The application also monitors the character’s health through hit points, tracks their progress through experience points.&lt;/p&gt;
&lt;p&gt;A key feature of this application is its detailed inventory management system. In the context of D&amp;amp;D, a character’s inventory can include a wide range of items. These can be weapons like swords and bows, armor like shields and helmets, adventuring gear like ropes and torches, tools like thieves’ tools and musical instruments, and even magic items like potions and scrolls. The application allows users to add or remove items from their character’s inventory, effectively managing their collection of items.&lt;/p&gt;
&lt;p&gt;The inventory management system also keeps track of the weight of the items, as carrying too many heavy items can slow a character down. It provides detailed information about each item, such as its properties, value, and description.&lt;/p&gt;
&lt;p&gt;One special item that can be managed in the inventory is the “Bag of Holding”. In D&amp;amp;D, a Bag of Holding is a magical item that can hold more items than its size would suggest. It’s a small sack, but its inside is larger than its outside dimensions. Regardless of what is put into the bag, it weighs a fixed amount. This makes it highly valuable for characters carrying many items. The application should be able to handle such special items and their unique properties.&lt;/p&gt;
&lt;p&gt;Based on this description, design a UML class diagram that represents the structure of this application. Consider the classes, their attributes, methods, and relationships.&lt;/p&gt;
&lt;p&gt;Add your name and your partner's name (if you have one) to the diagram. If you do not put your name on the file you will get a zero.&lt;/p&gt;
&lt;p&gt;Upload a screenshot. If you worked in a pair, get the screenshot from your partner and upload the same screenshot.&lt;/p&gt;
&lt;p&gt;You can screenshot a diagrammer of your choice, or draw it on paper and take a photo, or you can draw it with a tablet.&lt;/p&gt;
&lt;p&gt;Here are some free diagrammers:&lt;/p&gt;
&lt;p&gt;Here's a handy diagrammer online: &lt;em&gt;https://app.diagrams.net/&lt;/em&gt;&lt;br&gt;
IF that one doesn't work for you, try a different one.&lt;br&gt;
Here's a Java one: &lt;em&gt;https://www.umlet.com/changes.htm&lt;/em&gt; (download the stand alone)&lt;/p&gt;</content><category term="archive"/><category term="resources"/><category term="reading"/><category term="references"/><category term="practice"/></entry><entry><title>B2 27th March Class Exercise</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer_march27.html" rel="alternate"/><published>2024-10-08T00:00:00+05:00</published><updated>2024-10-08T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-10-08:/lums-cs360/archive/class_participation_exer_march27.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Class Participation Exercise&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Design and create a sequence diagram for a system that allows users to customize a car using the decorator pattern. It might be helpful to sketch the class diagram, but it's not required, only the sequence diagram is required.&lt;/p&gt;
&lt;p&gt;Use the decorator pattern to implement a simulator, a car and some upgrades that can be applied to the car. The car has some basic properties like model, color, speed, and price. A variety of upgrades are available such as a V8 engine, a turbocharger, a spoiler, and racing tires.&lt;/p&gt;
&lt;p&gt;Make a sequence diagram that shows the interaction between the objects when it constructs a car with at least 2 upgrades and then computes its price.&lt;/p&gt;
&lt;p&gt;Do not submit Java, submit UML &lt;strong&gt;Sequence Diagram&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Add your name and your partner's name (if you have one) to the diagram. If you don't, you won't get credit.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Upload a screenshot. If you worked in a pair, get the screenshot from your partner and upload the same screenshot.&lt;/p&gt;
&lt;p&gt;You can screenshot a diagrammer of your choice, or draw it on paper and take a photo.
Here's a handy diagrammer online: https://app.diagrams.net/ IF that one doesn't work for you, try a different one.&lt;/p&gt;</content><category term="archive"/><category term="resources"/><category term="reading"/><category term="references"/><category term="practice"/></entry><entry><title>Class Participation Exercise Sequence Diagram</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer_march24_sequence.html" rel="alternate"/><published>2024-09-25T00:00:00+05:00</published><updated>2024-09-25T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-09-25:/lums-cs360/archive/class_participation_exer_march24_sequence.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Class Participation Exercise March 24 - Sequence Diagram&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Proper completion of this exercise is considered as part of course participation. An answer will be discussed in class.&lt;/p&gt;
&lt;p&gt;Consider the basic command design pattern, with Invoker, ConcreteCommand, and Receiver classes. Assume also there is a Client class to create a ConcreteCommand object and bind it to an Invoker object via dependency injection.&lt;/p&gt;
&lt;p&gt;Draw the UML sequence diagram that depicts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the command creation and its binding to an invoker, and&lt;/li&gt;
&lt;li&gt;the behavior of the command pattern to have the invoker execute the command, which runs an action on a receiver&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Submit your sequence diagram as a PDF, PNG, or JPEG file.&lt;/p&gt;</content><category term="archive"/><category term="resources"/><category term="reading"/><category term="references"/><category term="practice"/></entry><entry><title>Class Participation Exercise (Cohesion and Coupling)</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_cohesion_coupling.html" rel="alternate"/><published>2024-09-21T00:00:00+05:00</published><updated>2024-09-21T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-09-21:/lums-cs360/archive/class_participation_cohesion_coupling.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Class Participation Exercise: Cohesion and Coupling&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;For the first set of UML diagrams which one has more coupling CarA or CarB?&lt;/li&gt;
&lt;li&gt;For the second set of UML diagrams (spaceship) which one has the most coupling?&lt;/li&gt;
&lt;li&gt;Out of all these classes, which classes are the least Cohesive?&lt;/li&gt;
&lt;li&gt;Out of all these classes, which classes are the most Cohesive?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt="Image" src="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_cohesion_coupling.png"&gt;&lt;/p&gt;</content><category term="archive"/><category term="resources"/><category term="participation"/><category term="references"/><category term="practice"/></entry><entry><title>Class Participation Exercise (CRC Cards)</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_crc.html" rel="alternate"/><published>2024-09-21T00:00:00+05:00</published><updated>2024-09-21T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-09-21:/lums-cs360/archive/class_participation_crc.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Class Participation Exercise: CRC Cards&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Instructions:&lt;/strong&gt; You are tasked with the Object Oriented Analysis (OOA) of the following problem. Please make CRC cards (Class Reponsibility Collaboration) for each meaningful class.&lt;/p&gt;
&lt;p&gt;I want to see if a skin-blemish changes over time. To prove that a blemish changes I need evidence (photos). I would like to take photos of these blemishes over time and store them in a safe place. I want the photos to be taken consistently. These photos can be provided to physicians when needed.&lt;/p&gt;
&lt;p&gt;Example format:&lt;/p&gt;
&lt;p&gt;Class: UFO
Collaborator: Alien, Earthling
Responsibility: Provide an Earthling abduction platform
Responsibility: Carry Aliens&lt;/p&gt;
&lt;p&gt;Class: Earthling
Collaborator: Alien, UFO
Responsibility: Abductee
Responsibility: To be mind probed&lt;/p&gt;
&lt;p&gt;Class: Cow
Collaborator: Alien, UFO
Responsibility: Abductee
Responsibility: To be mind probed
Generalization: Earthling&lt;/p&gt;
&lt;p&gt;Repeat this format for each class you think is relevant.&lt;/p&gt;</content><category term="archive"/><category term="resources"/><category term="participation"/><category term="references"/><category term="practice"/></entry><entry><title>Class Participation Exercise (Git)</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_git.html" rel="alternate"/><published>2024-09-21T00:00:00+05:00</published><updated>2024-09-21T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-09-21:/lums-cs360/archive/class_participation_git.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;CMPUT301 Exercise: GIT Stuff you should know!&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Q1: I committed a big mistake, I want to restore my repository to the prior commit, what should I run?&lt;/li&gt;
&lt;li&gt;Q2: I want to record a change locally, what do I run?&lt;/li&gt;
&lt;li&gt;Q3: How do I share my changes?&lt;/li&gt;
&lt;li&gt;Q4: How do I get my colleagues changes?&lt;/li&gt;
&lt;li&gt;Q5: How do you checkout commit, 9a4c3ef1630e13ced5b5a34faaa70d82c3634138 as a new branch?&lt;/li&gt;
&lt;/ul&gt;</content><category term="archive"/><category term="resources"/><category term="participation"/><category term="references"/><category term="practice"/></entry><entry><title>Class Participation Exercise: Factory Method Pattern (Mar 29)</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer_march29_Factory_Method_Pattern.html" rel="alternate"/><published>2024-09-19T00:00:00+05:00</published><updated>2024-09-19T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-09-19:/lums-cs360/archive/class_participation_exer_march29_Factory_Method_Pattern.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Class Participation Exercise: Factory Method Pattern&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Design a framework using the Factory Method Pattern for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Application and Document superclasses &lt;/li&gt;
&lt;li&gt;And an actual application would make these:&lt;ul&gt;
&lt;li&gt;Add MyApplication and MyDocument subclasses&lt;/li&gt;
&lt;li&gt;Add YourApplication and YourDocument subclasses&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Write a general newDocument method in Application that ultimately instantiates a MyDocument if your application is a MyApplication.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Draw the UML class diagram for the above problem using the Factory Method Pattern using concrete and abstract classes.&lt;/li&gt;
&lt;li&gt;What is the code in MyApplication for the method newDocument?&lt;/li&gt;
&lt;/ul&gt;</content><category term="archive"/><category term="resources"/><category term="reading"/><category term="references"/><category term="practice"/></entry><entry><title>Class Participation Exercise: Template Method Pattern (Mar 26)</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer_march26_Template_Method.html" rel="alternate"/><published>2024-09-19T00:00:00+05:00</published><updated>2024-09-19T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-09-19:/lums-cs360/archive/class_participation_exer_march26_Template_Method.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Class Participation Exercise: Template Method Pattern&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Rewrite &lt;code&gt;countWords()&lt;/code&gt;
* Convert the &lt;code&gt;countWords()&lt;/code&gt; method to a template method using the &lt;strong&gt;Template Method Pattern&lt;/strong&gt;, removing the conditionals.&lt;/p&gt;
&lt;p&gt;Write code for one of the following subclasses:
* &lt;code&gt;RawWordCounter&lt;/code&gt;
* &lt;code&gt;WordCounterNoStopWords&lt;/code&gt;
* &lt;code&gt;LowerCaseWordCounter&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;WordCounter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;countWords&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;loadData&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lowerCaseWords&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;lowerCaseData&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;removeStopWords&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;filterStopWords&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;calculateTermFrequency&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;calculateTermDocumentFrequency&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;saveCountData&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="archive"/><category term="resources"/><category term="reading"/><category term="references"/><category term="practice"/></entry><entry><title>Practice w23hm1 Answers</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hm1a.html" rel="alternate"/><published>2024-09-19T00:00:00+05:00</published><updated>2024-09-19T00:00:00+05:00</updated><author><name>Abram Hindle</name></author><id>tag:lums-cs360-web.github.io,2024-09-19:/lums-cs360/resources/practice/w23hm1a.html</id><summary type="html">&lt;p&gt;Practice Exam Question&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Practice w23hm1 Answers Videos:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://drive.google.com/drive/folders/1--tcPGlIMEQ-wPykGEWLbmTRTgGaS-Vf?usp=sharing"&gt;Practice W23HM1 Answers Videos&lt;/a&gt;&lt;/p&gt;</content><category term="practice"/><category term="resources"/><category term="reading"/><category term="references"/><category term="videos"/><category term="practice"/><category term="exams"/></entry><entry><title>Class Participation Exercise 11</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer11.html" rel="alternate"/><published>2024-09-18T00:00:00+05:00</published><updated>2024-09-18T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-09-18:/lums-cs360/archive/class_participation_exer11.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Class Participation Exercise 11&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Apply the composite design pattern to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;model the structural representation of binary logical expressions involving the binary operators and and or, and boolean literals true and false; and&lt;/li&gt;
&lt;li&gt;support the uniform, recursive evaluation of such expressions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Draw the UML class diagram for the object-oriented design, applying the design pattern. Include suitable classes, relationships, attributes, and methods.&lt;/p&gt;</content><category term="archive"/><category term="resources"/><category term="participation"/><category term="references"/><category term="practice"/></entry><entry><title>Class Participation Exercise 12</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer12.html" rel="alternate"/><published>2024-09-18T00:00:00+05:00</published><updated>2024-09-18T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-09-18:/lums-cs360/archive/class_participation_exer12.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Class Participation Exercise 12&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Proper completion of this exercise is considered as part of course participation. An answer will be discussed in class.&lt;/p&gt;
&lt;p&gt;You have a design where a two-dimensional rectangle drawing method takes a top left point and a bottom right point. Also, in your design, the points are specified by integer x and y coordinates.&lt;/p&gt;
&lt;p&gt;public interface RectangleDrawer {
    public void draw( Point topLeft, Point bottomRight );
}
Suppose, however, you want to reuse a rectangle drawing method that takes four integer parameters: top left x coordinate, top left y coordinate, width, and height.&lt;/p&gt;
&lt;p&gt;public class RectangleRenderer {
    public void render( int x, int y, int width, int height ) { ... }
    ...
}
Write Java code for a rectangle drawing object adapter.&lt;/p&gt;
&lt;p&gt;public class RectangleDrawerAdapter ...
Submit your Java code as a zip archive.&lt;/p&gt;</content><category term="archive"/><category term="resources"/><category term="participation"/><category term="references"/><category term="practice"/></entry><entry><title>Class Participation Exercise 13</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer13.html" rel="alternate"/><published>2024-09-18T00:00:00+05:00</published><updated>2024-09-18T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-09-18:/lums-cs360/archive/class_participation_exer13.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Class Participation Exercise 13&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Proper completion of this exercise is considered as part of course participation. An answer will be discussed in class.&lt;/p&gt;
&lt;p&gt;Apply the decorator design pattern to represent the structure of a pizza and for calculating its total cost.&lt;/p&gt;
&lt;p&gt;Starting with a base (e.g., thick crust), you can decorate with successive toppings (e.g., rich sauce, then pepperoni, then cheese). Each base or topping has a specific incremental cost to add to the total cost.&lt;/p&gt;
&lt;p&gt;Draw a UML class diagram that applies the decorator pattern for the structure of the above base and toppings.&lt;/p&gt;
&lt;p&gt;Submit your diagram as a PNG file.&lt;/p&gt;</content><category term="archive"/><category term="resources"/><category term="participation"/><category term="references"/><category term="practice"/></entry><entry><title>Class Participation Exercise 9</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer9.html" rel="alternate"/><published>2024-09-18T00:00:00+05:00</published><updated>2024-09-18T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-09-18:/lums-cs360/archive/class_participation_exer9.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Class Participation Exercise 9&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Consider a Rect class to represent a rectangle in a two-dimensional integer plane.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Rect&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// create rectangle with given corners&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Rect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Point&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;topLeft&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Point&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;botRight&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// return true iff point p is in or on this rectangle&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;boolean&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;encloses&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Point&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Depict a thorough set of test case equivalence classes for the encloses method, also indicating the expected results. Add explanatory text as needed for analogous or unusual cases. State any assumptions.&lt;/p&gt;
&lt;p&gt;Do not implement the method. Do not write test code. Do not use JUnit.&lt;/p&gt;</content><category term="archive"/><category term="resources"/><category term="participation"/><category term="references"/><category term="practice"/></entry><entry><title>Class Participation Exercise 9</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_code_to_uml_jan_15.html" rel="alternate"/><published>2024-09-18T00:00:00+05:00</published><updated>2024-09-18T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-09-18:/lums-cs360/archive/class_participation_code_to_uml_jan_15.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;strong&gt;Class Participation Exercise: Code to UML (UFO)&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UFO.java&lt;/span&gt;
&lt;span class="n"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UFO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Collection&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Earthling&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;abductees&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Earthling.java&lt;/span&gt;
&lt;span class="n"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Earthling&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stomachs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;boolean&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mindProbeable&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img alt="" src="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_code_to_uml_jan_15_1.png"&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;What notation goes here for this relationship?&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;a) Not selected
b) ←
c) —
d) ◇
e) ◆
f) ◁
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;What notation goes here for the multiplicity&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;a) 0
b) 1
c) 0..1
d) 0.._
e) 1.._
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;What notation goes here for the instance variable?&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;a) private
b) public
c) -
d) +
e) attributes
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;What notation goes here for this method?&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;a) private
b) public
c) -
d) +
e) behaviors
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img alt="" src="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_code_to_uml_jan_15_2.png"&gt;&lt;/p&gt;</content><category term="archive"/><category term="resources"/><category term="participation"/><category term="references"/><category term="practice"/></entry><entry><title>Class Participation Exercise April 14</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer_april14.html" rel="alternate"/><published>2024-09-18T00:00:00+05:00</published><updated>2024-09-18T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-09-18:/lums-cs360/archive/class_participation_exer_april14.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;p&gt;Speaker is a class that utters words and uses the &lt;strong&gt;state&lt;/strong&gt; pattern to change its behaviour.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Speaker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Speak&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;speak&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// delegate behaviour&lt;/span&gt;

&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;speak&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;speak&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;speak&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;Speak&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;speak&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Squawk&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;implements&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Speak&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Cluck&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;implements&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Speak&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Tick&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;implements&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Speak&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;speak&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Tick”;&lt;/span&gt;

&lt;span class="s"&gt;     }&lt;/span&gt;

&lt;span class="s"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Speaker has behaviours such as Squawk which returns random Squawking strings, and Cluck which returns random clucking strings. Tick just returns "Tick”.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Finish&lt;/strong&gt; this decorator for Speak states that lowercases the Speak states.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;//&amp;quot;X”.toLowerCase().equals(&amp;quot;x”)&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LowerCaseSpeakDecorator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;implements&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Speak&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;Speak&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;speak&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;LowerCaseSpeakDecorator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Speak&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;delegate&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;speak&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;delegate&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;speak&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;







&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Show how to make a lowercase tick behaviour.&lt;/p&gt;</content><category term="archive"/><category term="resources"/><category term="participation"/><category term="references"/><category term="practice"/></entry><entry><title>Class Participation Exercise April 17</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer_april7.html" rel="alternate"/><published>2024-09-18T00:00:00+05:00</published><updated>2024-09-18T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-09-18:/lums-cs360/archive/class_participation_exer_april7.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;a href="../general/slides/adapter-pattern-quiz.pdf"&gt;View adapter-pattern-quiz&lt;/a&gt;&lt;/p&gt;</content><category term="archive"/><category term="resources"/><category term="participation"/><category term="references"/><category term="practice"/></entry><entry><title>Class Participation Exercise (Code to UML)</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer_codeToUML.html" rel="alternate"/><published>2024-09-18T00:00:00+05:00</published><updated>2024-09-18T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-09-18:/lums-cs360/archive/class_participation_exer_codeToUML.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Class Participation Exercise&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Consider a Rect class to represent a rectangle in a two-dimensional integer plane.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Shape&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;protected&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;myLocation&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Shape&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;setLocation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getLocation&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Square&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;extends&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Shape&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;side&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Square&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;setSide&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Document this Java code by expressing its design in a corresponding UML class diagram.&lt;/p&gt;
&lt;p&gt;Submit the diagram as a PNG or JPG or PDF file.&lt;/p&gt;
&lt;p&gt;(For this exercise, the diagram can be hand drawn on paper, with a picture of it submitted as the file.)&lt;/p&gt;</content><category term="archive"/><category term="resources"/><category term="participation"/><category term="references"/><category term="practice"/></entry><entry><title>Class Participation Exercise Design Principles</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer_designPrinciples.html" rel="alternate"/><published>2024-09-18T00:00:00+05:00</published><updated>2024-09-18T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-09-18:/lums-cs360/archive/class_participation_exer_designPrinciples.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;p&gt;Proper completion of this exercise is considered as part of course participation.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Initial versions of early programming languages (e.g., Fortran) supported:&lt;/li&gt;
&lt;li&gt;[ ] abstract data types&lt;/li&gt;
&lt;li&gt;[ ] program and subroutines&lt;/li&gt;
&lt;li&gt;[ ] local variables&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;[ ] classes and objects&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Abstraction is the idea of simplifying a concept in the problem domain to its essentials within some &lt;strong&gt;&lt;em&gt;_&lt;/em&gt;&lt;/strong&gt;___.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Using encapsulation is sometimes called &lt;strong&gt;&lt;em&gt;_&lt;/em&gt;&lt;/strong&gt;___ thinking.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Decomposition of a whole thing into parts mainly involves thinking about:&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;[ ] fixed or dynamic number of parts&lt;/li&gt;
&lt;li&gt;[ ] essential attributes and behaviors of parts&lt;/li&gt;
&lt;li&gt;[ ] lifetimes of wholes and parts&lt;/li&gt;
&lt;li&gt;[ ] commonalities among the parts&lt;/li&gt;
&lt;/ol&gt;</content><category term="archive"/><category term="resources"/><category term="participation"/><category term="references"/><category term="practice"/></entry><entry><title>Class Participation Exercise Proxy Pattern</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/Class_Participation_Exercise_Proxy_Pattern.html" rel="alternate"/><published>2024-09-18T00:00:00+05:00</published><updated>2024-09-18T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-09-18:/lums-cs360/archive/Class_Participation_Exercise_Proxy_Pattern.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Class Participation Exercise: Proxy Pattern&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Use the Proxy pattern to improve performance by not reading files that aren't actually needed yet.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;OurFile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;fileContents&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// returns entire file&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getName&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ConcreteFile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;implements&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OurFile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fileContents&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ConcreteFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getName&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;fileContents&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fileContents&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;assume &lt;code&gt;ConcreteFile&lt;/code&gt; exists and implements &lt;code&gt;OurFile&lt;/code&gt;. &lt;code&gt;ConcreteFile&lt;/code&gt; reads the entire file when it is constructed.&lt;/p&gt;
&lt;p&gt;Write java code for &lt;code&gt;ProxyFile&lt;/code&gt; that proxies a &lt;code&gt;ConcreteFile&lt;/code&gt; and doesn't have to read the entire file until  the contents of the file are needed, using the proxy pattern.&lt;/p&gt;</content><category term="archive"/><category term="resources"/><category term="participation"/><category term="references"/><category term="practice"/></entry><entry><title>Class Participation Exercise 9</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_code_to_uml_jan_15.html" rel="alternate"/><published>2024-09-18T00:00:00+05:00</published><updated>2024-09-18T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-09-18:/lums-cs360/archive/class_participation_code_to_uml_jan_15.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;strong&gt;Class Participation Exercise: Code to UML (UFO)&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UFO.java&lt;/span&gt;
&lt;span class="n"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UFO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Collection&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Earthling&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;abductees&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Earthling.java&lt;/span&gt;
&lt;span class="n"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Earthling&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stomachs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;boolean&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mindProbeable&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img alt="" src="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_code_to_uml_jan_15_1.png"&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;What notation goes here for this relationship?&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;a) Not selected
b) ←
c) —
d) ◇
e) ◆
f) ◁
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;What notation goes here for the multiplicity&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;a) 0
b) 1
c) 0..1
d) 0.._
e) 1.._
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;What notation goes here for the instance variable?&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;a) private
b) public
c) -
d) +
e) attributes
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;What notation goes here for this method?&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;a) private
b) public
c) -
d) +
e) behaviors
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img alt="" src="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_code_to_uml_jan_15_2.png"&gt;&lt;/p&gt;</content><category term="archive"/><category term="resources"/><category term="participation"/><category term="references"/><category term="practice"/></entry><entry><title>Class Participation Exercise 9</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer9.html" rel="alternate"/><published>2024-09-18T00:00:00+05:00</published><updated>2024-09-18T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-09-18:/lums-cs360/archive/class_participation_exer9.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Class Participation Exercise 9&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Consider a Rect class to represent a rectangle in a two-dimensional integer plane.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Rect&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// create rectangle with given corners&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Rect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Point&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;topLeft&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Point&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;botRight&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// return true iff point p is in or on this rectangle&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;boolean&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;encloses&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Point&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Depict a thorough set of test case equivalence classes for the encloses method, also indicating the expected results. Add explanatory text as needed for analogous or unusual cases. State any assumptions.&lt;/p&gt;
&lt;p&gt;Do not implement the method. Do not write test code. Do not use JUnit.&lt;/p&gt;</content><category term="archive"/><category term="resources"/><category term="participation"/><category term="references"/><category term="practice"/></entry><entry><title>Class Participation Exercise 2020-04-06 Long Method Refactoring</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer_20200406_Long_Method_Refactoring.html" rel="alternate"/><published>2024-09-17T00:00:00+05:00</published><updated>2024-09-17T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-09-17:/lums-cs360/archive/class_participation_exer_20200406_Long_Method_Refactoring.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Class Participation Exercise: Long Method Refactoring&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Extracts methods from this long method body by putting a box around code that will go into a new method. Then on the right hand side of that box write the method name.&lt;/p&gt;
&lt;p&gt;At the bottom, rewrite insertRecipe using those new methods.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cm"&gt;/**&lt;/span&gt;

&lt;span class="cm"&gt;* Inserts a Recipe into the Webservice&lt;/span&gt;

&lt;span class="cm"&gt;*/&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;insertRecipe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Recipe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;recipe&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;

&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;StringEntity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stringentity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;stringentity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;StringEntity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gson&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toJson&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;recipe&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;UnsupportedEncodingException&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;handleError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;HttpPost&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;httpPost&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;HttpPost&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;recipeURI&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;httpPost&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Accept&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;application/json&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;httpPost&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setEntity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stringentity&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;HttpResponse&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;httpclient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;httpPost&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClientProtocolException&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;handleError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IOException&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;handleError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;HttpEntity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getEntity&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;EntityUtils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;consume&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entity&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IOException&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="n"&gt;handleError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;httpPost&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;releaseConnection&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;insertRecipe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Recipe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;recipe&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// your new refactored method&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="archive"/><category term="resources"/><category term="reading"/><category term="references"/><category term="practice"/></entry><entry><title>Class Participation Exercise 2020-04-08 Refactoring</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer_20200408_Refactoring.html" rel="alternate"/><published>2024-09-17T00:00:00+05:00</published><updated>2024-09-17T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-09-17:/lums-cs360/archive/class_participation_exer_20200408_Refactoring.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;License&lt;/strong&gt;  &lt;/p&gt;
&lt;p&gt;Copyright 2012 Neil Borle, Mitchell Home, Bronte Lee, Aaron Padlesky, Eddie Santos   &lt;br&gt;
Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License.  &lt;br&gt;
You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0  &lt;/p&gt;
&lt;p&gt;Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&lt;br&gt;
See the License for the specific language governing permissions and limitations under the License. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Class Participation Exercise: Refactoring&lt;/strong&gt;&lt;/p&gt;
&lt;div style="text-align: center; margin: 20px;"&gt;
    &lt;img src="https://lums-cs360-web.github.io/lums-cs360/archive/exer20200408refactoring.png" alt="Participation Exercise Image" style="width: 800px;"&gt;
&lt;/div&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ResponseObtainerObtainer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ResponseObtainer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getResponseObtainer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;MediaType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;media&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LayoutInflater&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inflater&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;ViewGroup&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Exception&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ResponseObtainer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;obtainer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;layout_id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ViewGroup&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;view&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Class&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;extends&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ResponseObtainer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;obtainerClass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;switch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;media&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;layout_id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;R&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;layout&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;fragment_fulfill_text&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;obtainerClass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TextResponseObtainer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AUDIO&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;layout_id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;R&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;layout&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;fragment_fulfill_audio&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;obtainerClass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AudioResponseObtainer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PHOTO&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;layout_id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;R&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;layout&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;fragment_fulfill_photo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;obtainerClass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PhotoResponseObtainer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;// err....&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;// TODO: Give an error response obtainer?&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;view&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ViewGroup&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inflater&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;inflate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;layout_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;obtainer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;obtainerClass&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getConstructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ViewGroup&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;newInstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;view&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;obtainer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;List 1: Code Smell&lt;/p&gt;
&lt;p&gt;Evident in this code:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Propose or draw a refactoring for this code.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Why would a MediaType (TEXT, AUDIO, PHOTO) still be necessary after a refactoring?&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="archive"/><category term="resources"/><category term="reading"/><category term="references"/><category term="practice"/></entry><entry><title>Class Participation Exercise 3</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer3.html" rel="alternate"/><published>2024-09-17T00:00:00+05:00</published><updated>2024-09-17T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-09-17:/lums-cs360/archive/class_participation_exer3.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Class Participation Exercise 3&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Proper completion of this exercise is considered as part of course participation. An answer will be discussed in class.&lt;/p&gt;
&lt;p&gt;Convert this UML class diagram to corresponding basic Java source code.&lt;/p&gt;
&lt;p&gt;&lt;img alt="UML Class Diagram" src="https://lums-cs360-web.github.io/lums-cs360/archive/part3img1.png" style="margin: 20px auto;" width="600"&gt;&lt;/p&gt;
&lt;p&gt;Submit your code as a zip archive of the Java files. Or hand write the code on paper, and submit a picture of it as a PNG or JPG or PDF file.&lt;/p&gt;</content><category term="archive"/><category term="resources"/><category term="reading"/><category term="references"/><category term="practice"/></entry><entry><title>Class Participation Exercise 8</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer8.html" rel="alternate"/><published>2024-09-17T00:00:00+05:00</published><updated>2024-09-17T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-09-17:/lums-cs360/archive/class_participation_exer8.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Class Participation Exercise 8&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Proper completion of this exercise is considered as part of course participation. An answer will be discussed in class.&lt;/p&gt;
&lt;p&gt;Model the following behavior using a correct UML state diagram.&lt;/p&gt;
&lt;p&gt;I want to keep my flamethrower in a vault that's hard to find.&lt;/p&gt;
&lt;p&gt;So, to reveal the lock to the vault, I have to remove a helmet from a shelf. This will reveal the lock only while a door is closed.&lt;/p&gt;
&lt;p&gt;Once I can see the lock, I can insert my key to open the vault.&lt;/p&gt;
&lt;p&gt;For extra security, I make sure that I can open the vault only if I put the helmet back on the shelf.&lt;/p&gt;
&lt;p&gt;If an intruder forgets this precaution, a facehugger will be unleashed to disable the intruder.&lt;/p&gt;
&lt;p&gt;Submit the diagram as a PNG file.&lt;/p&gt;</content><category term="archive"/><category term="resources"/><category term="reading"/><category term="references"/><category term="practice"/></entry><entry><title>Class Participation Exercise 15</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer15.html" rel="alternate"/><published>2024-09-12T00:00:00+05:00</published><updated>2024-09-12T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-09-12:/lums-cs360/archive/class_participation_exer15.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Class Participation Exercise 15&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Proper completion of this exercise is considered as part of course participation. An answer will be discussed in class.&lt;/p&gt;
&lt;p&gt;Consider the following (partial) implementation of a Person class.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Person&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getName&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getTelephoneNumber&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;(&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;officeAreaCode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;) &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;officeNumber&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getOfficeAreaCode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;officeAreaCode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;setOfficeAreaCode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;areaCode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;officeAreaCode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;areaCode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getOfficeNumber&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;officeNumber&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;setOfficeNumber&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;officeNumber&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;officeAreaCode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;officeNumber&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Draw the UML class diagram for the refactored design.&lt;/p&gt;
&lt;p&gt;Submit your diagram as a PNG file.&lt;/p&gt;</content><category term="archive"/><category term="resources"/><category term="participation"/><category term="references"/><category term="practice"/></entry><entry><title>Practice w23am1q1</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am1q1.html" rel="alternate"/><published>2024-09-12T00:00:00+05:00</published><updated>2024-09-12T00:00:00+05:00</updated><author><name>Ildar Akhmetov</name></author><id>tag:lums-cs360-web.github.io,2024-09-12:/lums-cs360/resources/practice/w23am1q1.html</id><summary type="html">&lt;p&gt;Practice Exam Question&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Java to UML Class Diagram&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Convert this Java code to a UML class diagram. This Java code is meant to represent passengers and buses in the fictional world of My Neighbour Totoro. A Catbus can take passengers to places like a regular bus, but it also behaves like a cat. There is one specific kind of passenger (Totoro) that can ask the Catbus to do things for him.&lt;/p&gt;
&lt;p&gt;Draw a well-designed UML class diagram to represent this information. Provide the basic abstractions, attributes, methods, relationships, multiplicities, and navigabilities as appropriate.  "...” means much code is omitted.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;abstract&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Bus&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sign&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// destination sign (e.g. &amp;quot;Hospital&amp;quot;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Passenger&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;passengers&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Bus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sign&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sign&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sign&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;passengers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Passenger&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;abstract&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Passenger&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;abstract&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;boolean&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;travel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;CatLike&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;purr&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CatBus&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;extends&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Bus&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;implements&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CatLike&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;CatBus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sign&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kd"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sign&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Passenger&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;boolean&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;travel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;purr&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;Location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;Passenger&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Totoro&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;implements&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Passenger&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// Totoro is the only King of the Forest&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// He doesn’t only ride Catbuses, but can control them&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;controlCatBus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CatBus&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bus&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="practice"/><category term="resources"/><category term="reading"/><category term="references"/><category term="videos"/><category term="practice"/><category term="exams"/></entry><entry><title>Practice w23am1q2</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am1q2.html" rel="alternate"/><published>2024-09-12T00:00:00+05:00</published><updated>2024-09-12T00:00:00+05:00</updated><author><name>Ildar Akhmetov</name></author><id>tag:lums-cs360-web.github.io,2024-09-12:/lums-cs360/resources/practice/w23am1q2.html</id><summary type="html">&lt;p&gt;Practice Exam Question&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;UML Class Diagram to Java&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Convert this UML class diagram about the Harry Potter universe to skeletal Java Code. Include all attributes and obviously public methods. Make sure all required methods are implemented. Include all generalizations and necessary associations. You may use ellipses (...) to indicate there is some code in the method but it's a midterm and who has time to write that code!&lt;/p&gt;
&lt;p&gt;ACCOMMODATIONS: If you need a textual version of this UML Q2.pdf and Q2.svg are available for you&lt;/p&gt;
&lt;p&gt;&lt;img alt="Image" src="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am1q2.png"&gt;&lt;/p&gt;</content><category term="practice"/><category term="resources"/><category term="reading"/><category term="references"/><category term="videos"/><category term="practice"/><category term="exams"/></entry><entry><title>Practice w23am1q3</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am1q3.html" rel="alternate"/><published>2024-09-12T00:00:00+05:00</published><updated>2024-09-12T00:00:00+05:00</updated><author><name>Ildar Akhmetov</name></author><id>tag:lums-cs360-web.github.io,2024-09-12:/lums-cs360/resources/practice/w23am1q3.html</id><summary type="html">&lt;p&gt;Practice Exam Question&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Liskov Substitution Principle&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This Java code is poor! It violates the Liskov Substitution principle!&lt;/p&gt;
&lt;p&gt;Restructure this code as UML and &lt;strong&gt;draw a UML Class Diagram of restructured code that doesn't violate the Liskov Substitution principle&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Draw a well-designed UML class diagram to represent this information. Provide the basic abstractions, attributes, methods, relationships, multiplicities, and navigabilities as appropriate.&lt;/p&gt;
&lt;p&gt;"...” means much code is omitted.&lt;/p&gt;
&lt;p&gt;This Java code is about quizzes (similar to eClass quizzes).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Be sure to leave a note on the diagram highlighting how you address the violation&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Quiz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;protected&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Question&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;questions&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;printAnswerKey&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;questions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;questions&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getCorrectAnswer&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Exam&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;extends&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Quiz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;protected&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Room&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;room&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// unlike quizzes, exams are administered in a room&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Question&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;protected&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;protected&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;answers&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// choices&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;protected&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;correctAnswer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// index of a correct answer&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getCorrectAnswer&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;correctAnswer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;EssayQuestion&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;extends&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Question&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getCorrectAnswer&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;err&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Essay questions do not have a correct answer.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="practice"/><category term="resources"/><category term="reading"/><category term="references"/><category term="videos"/><category term="practice"/><category term="exams"/></entry><entry><title>Practice w23am2q1</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am2q1.html" rel="alternate"/><published>2024-09-12T00:00:00+05:00</published><updated>2024-09-12T00:00:00+05:00</updated><author><name>Ildar Akhmetov</name></author><id>tag:lums-cs360-web.github.io,2024-09-12:/lums-cs360/resources/practice/w23am2q1.html</id><summary type="html">&lt;p&gt;Practice Exam Question&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;CRC Cards&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Engage in Object-Oriented Analysis and read the following scenario paragraph and pull out potential nouns that may lead to classes and verbs that may lead to methods or relationships.&lt;/p&gt;
&lt;p&gt;Make CRC cards to model each meaningful class relevant to the problem and scenario. Collaborators and responsibilities must be described.&lt;/p&gt;
&lt;p&gt;You may use plain text, and separate the cards by a blank line. The following format is recommended:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;Class&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;

&lt;span class="n"&gt;Collaborator&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Y&lt;/span&gt;

&lt;span class="n"&gt;Collaborator&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Z&lt;/span&gt;

&lt;span class="n"&gt;Responsibility&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;K&lt;/span&gt;

&lt;span class="n"&gt;Responsibility&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;

&lt;span class="n"&gt;Responsibility&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;M&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;I see that the class that I take is scheduled in TEL 150. I have never taken a class in this classroom before, so I open the RateMyUofAClassroom app. It shows a long list of rooms. I start typing “TEL 1”, and the app suggests “TEL 150”. I click it and see that this classroom has an average rating of 4.3, nice! I go to my class and actually like the room a lot. I open the app and give the room a 5. The average rating is updated, it's now 4.4! What if I try to rate it again? No, I get an error message saying "You have already rated this classroom.”&lt;/em&gt;&lt;/p&gt;</content><category term="practice"/><category term="resources"/><category term="reading"/><category term="references"/><category term="videos"/><category term="practice"/><category term="exams"/></entry><entry><title>Practice w23am2q2</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am2q2.html" rel="alternate"/><published>2024-09-12T00:00:00+05:00</published><updated>2024-09-12T00:00:00+05:00</updated><author><name>Ildar Akhmetov</name></author><id>tag:lums-cs360-web.github.io,2024-09-12:/lums-cs360/resources/practice/w23am2q2.html</id><summary type="html">&lt;p&gt;Practice Exam Question&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Model-View (UML)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Interpret the Java code below. It represents an automated parking lot system. It provides an API to monitor the status of a parking lot. Currently, the ParkingLot class can display available parking spots and draw the parking lot map. We want to add a pie chart showing the current ratio of available and occupied parking spots. Unfortunately, we seem to be making this class too big.&lt;/p&gt;
&lt;p&gt;Refactor/restructure this code &lt;strong&gt;AS A UML CLASS DIAGRAM OF RESTRUCTURED CODE&lt;/strong&gt; to implement the Model-View pattern (variation of the MVC pattern, but without a dedicated Controller). Separate out models and views, and add new views as necessary to address the new features that were asked for. Explicitly improve cohesion with your restructuring of the code. You can make new classes and interfaces, you can move methods, rename methods, and make new methods.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add a pie chart&lt;/li&gt;
&lt;li&gt;Restructure into MVC using just models and views.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On the diagram, &lt;strong&gt;CLEARLY LABEL which class(es) represents the Model and the View components&lt;/strong&gt;. You do &lt;strong&gt;NOT&lt;/strong&gt; need to have a Controller.&lt;/p&gt;
&lt;p&gt;Draw a well-designed UML class diagram to represent this information. Provide the basic abstractions, attributes, methods, relationships, multiplicities, and navigabilities as appropriate. "...” means much code is omitted.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do NOT submit Java, submit UML!&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ParkingLot&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numCars&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;HashMap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Boolean&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;spots&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="cm"&gt;/* ... */&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="cm"&gt;/* called by the parking detection system */&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;protected&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;carIn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;spot&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;spots&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;spot&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;numCars&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;render&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="cm"&gt;/* called by the parking detection system */&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;protected&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;carOut&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;spot&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;spots&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;spot&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;numCars&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;render&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// lists available parking spots&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;listSpots&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="cm"&gt;/* ... */&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// draws a map of the parking spots and their status&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;drawMap&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="cm"&gt;/* ... */&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;listSpots&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;drawMap&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="practice"/><category term="resources"/><category term="reading"/><category term="references"/><category term="videos"/><category term="practice"/><category term="exams"/></entry><entry><title>Practice w23am2q3</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am2q3.html" rel="alternate"/><published>2024-09-12T00:00:00+05:00</published><updated>2024-09-12T00:00:00+05:00</updated><author><name>Ildar Akhmetov</name></author><id>tag:lums-cs360-web.github.io,2024-09-12:/lums-cs360/resources/practice/w23am2q3.html</id><summary type="html">&lt;p&gt;Practice Exam Question&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Use Case&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Write a use case for the task of a young person applying for a job based on the following scenario.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;I am 16 years old and looking for my first job, so I go to the MyFirstJob website. The website shows that the minimum age to work in Alberta is 15 and asks for my date of birth. I enter "2007-01-23". On the next page, there is a map showing all employers with current job openings. I use a filter to select the "Food" category. I see that a local coffee shop in my neighbourhood, "Café con Sabor," is looking for a part-time barista. I know a lot about coffee from my parents, so this sounds like a good fit! I click on "Café con Sabor" and see the application form. I go ahead and fill it out. Then I have to upload a resume. I try to upload my resume in DOCX format, but I get an error message: "Only PDF is supported". I upload the PDF, and the site displays the message "Application submitted!" and a happy face emoticon.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Include the following elements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use case name&lt;/li&gt;
&lt;li&gt;Participating actors&lt;/li&gt;
&lt;li&gt;Goal&lt;/li&gt;
&lt;li&gt;Trigger&lt;/li&gt;
&lt;li&gt;Preconditions&lt;/li&gt;
&lt;li&gt;Postconditions&lt;/li&gt;
&lt;li&gt;Basic flow&lt;/li&gt;
&lt;li&gt;One exception&lt;/li&gt;
&lt;/ul&gt;</content><category term="practice"/><category term="resources"/><category term="reading"/><category term="references"/><category term="videos"/><category term="practice"/><category term="exams"/></entry><entry><title>Practice w23hm1q1</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hm1q1.html" rel="alternate"/><published>2024-09-12T00:00:00+05:00</published><updated>2024-09-12T00:00:00+05:00</updated><author><name>Abram Hindle</name></author><id>tag:lums-cs360-web.github.io,2024-09-12:/lums-cs360/resources/practice/w23hm1q1.html</id><summary type="html">&lt;p&gt;Practice Exam Question&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Java to UML Class Diagram&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Convert this Java code to a UML class diagram. This Java code is meant to represent a mouth tasting and consuming food. There are food, flavours, tongues, and taste buds.&lt;/p&gt;
&lt;p&gt;Draw a well-designed UML class diagram to represent this information. Provide the basic abstractions, attributes, methods, relationships, multiplicities, and navigabilities as appropriate.  "...” means much code is omitted.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.util.*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Mouth&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Collection&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Tooth&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;teeth&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Tongue&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tongue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Tooth&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Tongue&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TasteBud&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buds&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Flavour&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;taste&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Food&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Flavour&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flavours&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Flavour&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;buds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;flavours&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buds&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;taste&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AggregateFlavour&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flavours&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;TasteBud&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Flavour&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;taste&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Food&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;Flavour&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sweet&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;salty&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AggregateFlavour&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;implements&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Flavour&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Flavour&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flavours&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;AggregateFlavour&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Flavour&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flav&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;flavours&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flav&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sweet&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// Sum of sweetness&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;salty&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// Sum of salty&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;Food&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="practice"/><category term="resources"/><category term="reading"/><category term="references"/><category term="videos"/><category term="practice"/><category term="exams"/></entry><entry><title>Practice w23hm1q2</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hm1q2.html" rel="alternate"/><published>2024-09-12T00:00:00+05:00</published><updated>2024-09-12T00:00:00+05:00</updated><author><name>Abram Hindle</name></author><id>tag:lums-cs360-web.github.io,2024-09-12:/lums-cs360/resources/practice/w23hm1q2.html</id><summary type="html">&lt;p&gt;Practice Exam Question&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;UML Class Diagram to Java&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Convert this UML class diagram about the parameciums (a fancy microbe) to skeletal Java Code. Include all attributes and obviously public methods. Make sure all required methods are implemented. Include all generalizations and necessary associations. You may use ellipses (...) to indicate there is some code in the method but it's a midterm and who has time to write that code!&lt;/p&gt;
&lt;p&gt;ACCOMMODATIONS: If you need a textual version of this UML output.pdf is available for you.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Image" src="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hm1q2.png"&gt;&lt;/p&gt;</content><category term="practice"/><category term="resources"/><category term="reading"/><category term="references"/><category term="videos"/><category term="practice"/><category term="exams"/></entry><entry><title>Practice w23hm1q3</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hm1q3.html" rel="alternate"/><published>2024-09-12T00:00:00+05:00</published><updated>2024-09-12T00:00:00+05:00</updated><author><name>Abram Hindle</name></author><id>tag:lums-cs360-web.github.io,2024-09-12:/lums-cs360/resources/practice/w23hm1q3.html</id><summary type="html">&lt;p&gt;Practice Exam Question&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Liskov Substitution Principle&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This Java code is poor! It violates the Liskov Substitution principle!&lt;/p&gt;
&lt;p&gt;Restructure this code as UML and draw a UML Class Diagram of restructured code that doesn't violate the Liskov Substitution principle.&lt;/p&gt;
&lt;p&gt;Draw a well-designed UML class diagram to represent this information. Provide the basic abstractions, attributes, methods, relationships, multiplicities, and navigabilities as appropriate.&lt;/p&gt;
&lt;p&gt;"...” means much code is omitted.&lt;/p&gt;
&lt;p&gt;This Java code is about Monsters in a video game.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Be sure to leave a note on the diagram highlighting how you address the violation&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;Monster&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// move object to x, y&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;translate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;draw&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// Blob is an amphorous pile of goo&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Blob&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;implements&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Monster&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;translate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* ... */&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;draw&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* ... */&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// ImmobileBlob is the blob that doesn&amp;#39;t move!&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ImmobileBlob&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;extends&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Blob&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ImmobileBlob&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* ... */&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;translate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// do nothing&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;GameCanvas&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// translate the monsters into a 16 x 16 grid&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;gridify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Monster&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;translate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// % is modulus&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;draw&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="practice"/><category term="resources"/><category term="reading"/><category term="references"/><category term="videos"/><category term="practice"/><category term="exams"/></entry><entry><title>Practice w23hpmq1</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hpmq1.html" rel="alternate"/><published>2024-09-11T00:00:00+05:00</published><updated>2024-09-11T00:00:00+05:00</updated><author><name>Abram Hindle</name></author><id>tag:lums-cs360-web.github.io,2024-09-11:/lums-cs360/resources/practice/w23hpmq1.html</id><summary type="html">&lt;p&gt;Practice Exam Question&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;Convert this Java code to a UML class diagram. This Java code is meant to represent a animals. Draw a well-designed UML class diagram to represent this information. Provide the basic abstractions, attributes, methods, relationships, multiplicities, and navigabilities as appropriate.&lt;/p&gt;
&lt;p&gt;"..." means much code is omitted.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;protected&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;protected&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getName&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;Predator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;boolean&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;hunt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Animal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;Herbivore&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;eat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Plant&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Lion&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;extends&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Animal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;implements&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Predator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;boolean&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;hunt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Animal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Zebra&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;extends&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Animal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;implements&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Herbivore&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;protected&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stripes&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;eat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Plant&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Savannah&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;area&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Lion&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;alphaLion&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;protected&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Animal&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inhabitants&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Animal&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="practice"/><category term="resources"/><category term="reading"/><category term="references"/><category term="practice"/><category term="exams"/></entry><entry><title>Class Participation Exercise 20</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer20.html" rel="alternate"/><published>2024-09-10T00:00:00+05:00</published><updated>2024-09-10T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-09-10:/lums-cs360/archive/class_participation_exer20.html</id><summary type="html">&lt;p&gt;Individual, Assignments, Participation&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Class Participation Exercise 20&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Consider the following method to compute the base-two logarithm of a byte value (assumed positive here, maximum 127), truncated down to the nearest integer. For example, if the byte value is 17, the method returns 4.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;logb2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Assume this method is heavily used, and that operations like Math.log( double ) are relatively slow and should be avoided.&lt;/p&gt;
&lt;p&gt;Optimize this method to reduce the computation time needed, while maintaining the same expected behavior and using comparable data space. Your method must be proper Java and be a self-contained implementation (not call other methods). Add comments as appropriate to explain how it is intended to work.&lt;/p&gt;</content><category term="archive"/><category term="resources"/><category term="participation"/><category term="references"/><category term="practice"/></entry><entry><title>Class Participation Exercise 19</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer19.html" rel="alternate"/><published>2024-09-03T00:00:00+05:00</published><updated>2024-09-03T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-09-03:/lums-cs360/archive/class_participation_exer19.html</id><summary type="html">&lt;p&gt;Class Participation Exercise 19&lt;/p&gt;</summary><content type="html">&lt;div class="toc"&gt;
&lt;ul&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Opened:&lt;/strong&gt; Monday, 5 August 2019, 10:29 AM&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Closed:&lt;/strong&gt; Tuesday, 6 August 2019, 4:59 PM&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Proper completion of this exercise is considered as part of course participation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Consider the following sloppily designed user interface (a form for a web browser). Identify at least 5 issues why this user interface design is poor or inconsistent.&lt;/p&gt;
&lt;p&gt;&lt;img alt="User Interface" src="https://lums-cs360-web.github.io/lums-cs360/archive/part19img1.png" style="margin: 20px;" width="300"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Issue 1:&lt;/strong&gt;&lt;/p&gt;
&lt;textarea rows="2" cols="100" placeholder="Enter your text here..."&gt;&lt;/textarea&gt;

&lt;p&gt;&lt;strong&gt;Issue 2:&lt;/strong&gt;&lt;/p&gt;
&lt;textarea rows="2" cols="100" placeholder="Enter your text here..."&gt;&lt;/textarea&gt;

&lt;p&gt;&lt;strong&gt;Issue 3:&lt;/strong&gt;&lt;/p&gt;
&lt;textarea rows="2" cols="100" placeholder="Enter your text here..."&gt;&lt;/textarea&gt;

&lt;p&gt;&lt;strong&gt;Issue 4:&lt;/strong&gt;&lt;/p&gt;
&lt;textarea rows="2" cols="100" placeholder="Enter your text here..."&gt;&lt;/textarea&gt;

&lt;p&gt;&lt;strong&gt;Issue 5:&lt;/strong&gt;&lt;/p&gt;
&lt;textarea rows="2" cols="100" placeholder="Enter your text here..."&gt;&lt;/textarea&gt;

&lt;p&gt;&lt;strong&gt;Issue 6:&lt;/strong&gt;&lt;/p&gt;
&lt;textarea rows="2" cols="100" placeholder="Enter your text here..."&gt;&lt;/textarea&gt;

&lt;p&gt;&lt;strong&gt;Issue 7:&lt;/strong&gt;&lt;/p&gt;
&lt;textarea rows="2" cols="100" placeholder="Enter your text here..."&gt;&lt;/textarea&gt;

&lt;p&gt;&lt;strong&gt;Issue 8:&lt;/strong&gt;&lt;/p&gt;
&lt;textarea rows="2" cols="100" placeholder="Enter your text here..."&gt;&lt;/textarea&gt;

&lt;p&gt;&lt;strong&gt;Issue 9:&lt;/strong&gt;&lt;/p&gt;
&lt;textarea rows="2" cols="100" placeholder="Enter your text here..."&gt;&lt;/textarea&gt;

&lt;p&gt;&lt;strong&gt;Issue 10:&lt;/strong&gt;&lt;/p&gt;
&lt;textarea rows="2" cols="100" placeholder="Enter your text here..."&gt;&lt;/textarea&gt;

&lt;p&gt;&lt;button onclick="alert('Button clicked!')"&gt;Save as new template&lt;/button&gt;&lt;/p&gt;</content><category term="archive"/><category term="resources"/><category term="participation"/><category term="exercise"/><category term="archive"/></entry><entry><title>Exam Practice Questions</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/practice.html" rel="alternate"/><published>2024-09-03T00:00:00+05:00</published><updated>2024-09-03T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-09-03:/lums-cs360/resources/practice.html</id><summary type="html">&lt;p&gt;Exam Practice Questions&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;h3 id="exam-practice"&gt;Exam Practice&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/PracticeQuestions.pdf"&gt;PQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/Final-2015-Winter.pdf"&gt;W15HFQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/Midterm8.pdf"&gt;F15HMQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/Final-2015-Fall.pdf"&gt;F15HFQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/Midterm9-2016-Fall.pdf"&gt;F16HMQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/Final-2016-Fall.pdf"&gt;F16HFQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/Midterm10-2018-Fall.pdf"&gt;F18HMQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/Final-2018-Fall.pdf"&gt;F18HFQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/Midterm11-2020-Winter.pdf"&gt;W20HMQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/CMPUT301W20B_EB1_Final.pdf"&gt;W20HFQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/CMPUT301-Winter-2021-Midterm.pdf"&gt;W21HM1Q&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/CMPUT301-Winter-2021-Midterm2.pdf"&gt;W21HM2Q&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/CMPUT301-Winter-2021-Midterm3.pdf"&gt;W21HM3Q&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/CMPUT301W22Midterm1.pdf"&gt;W22M1Q&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/CMPUT301W22Midterm2.pdf"&gt;W22M2Q&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/CMPUT301W22Midterm3.pdf"&gt;W22M3Q&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/f22pmq.pdf"&gt;F22PMQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/f22pma.pdf"&gt;F22PMA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/f22pfq.pdf"&gt;F22PFQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/f22pfa.pdf"&gt;F22PFA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/f22pf2q.pdf"&gt;F22PF2Q&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/f22pf2a.pdf"&gt;F22PF2A&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am1q1.html"&gt;W23AM1Q1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am1q2.html"&gt;W23AM1Q2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am1q3.html"&gt;W23AM1Q3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am2q1.html"&gt;W23AM2Q1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am2q2.html"&gt;W23AM2Q2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am2q3.html"&gt;W23AM2Q3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am3q1.html"&gt;W23AM3Q1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am3q2.html"&gt;W23AM3Q2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am3q3.html"&gt;W23AM3Q3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hm1q1.html"&gt;W23HM1Q1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hm1q2.html"&gt;W23HM1Q2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hm1q3.html"&gt;W23HM1Q3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hm2q1.html"&gt;W23HM2Q1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hm2q2.html"&gt;W23HM2Q2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hm2q3.html"&gt;W23HM2Q3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hm3q1.html"&gt;W23HM3Q1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hm3q2.html"&gt;W23HM3Q2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hm3q3.html"&gt;W23HM3Q3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hpmq1.html"&gt;W23HPMQ1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23hm1a.html"&gt;W23HM1A&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="resources"/><category term="resources"/><category term="reading"/><category term="references"/><category term="videos"/><category term="practice"/><category term="exams"/></entry><entry><title>Old Lecture Recordings</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/oldrecordings.html" rel="alternate"/><published>2024-09-03T00:00:00+05:00</published><updated>2024-09-03T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-09-03:/lums-cs360/resources/oldrecordings.html</id><summary type="html">&lt;p&gt;Old Lecture Recordings 2020-2022&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;aside class="warning" role="paragraph"&gt;
All information about 
&lt;ul&gt;
    &lt;li&gt;dates,&lt;/li&gt;
    &lt;li&gt;labs,&lt;/li&gt;
    &lt;li&gt;requirements,&lt;/li&gt;
    &lt;li&gt;project,&lt;/li&gt;
    &lt;li&gt;deadlines,&lt;/li&gt;
    &lt;li&gt;what's on the final,&lt;/li&gt;
    &lt;li&gt;grading,&lt;/li&gt;
    &lt;li&gt;policy,&lt;/li&gt;
    &lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;
only applied to the semester they were recorded, so it's wrong for this year!
This material is provided as extra study material ONLY.
&lt;/aside&gt;</content><category term="resources"/><category term="resources"/><category term="reading"/><category term="references"/><category term="videos"/></entry><entry><title>Old Participation Exercise</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/participation.html" rel="alternate"/><published>2024-09-03T00:00:00+05:00</published><updated>2024-09-03T00:00:00+05:00</updated><author><name>LUMS</name></author><id>tag:lums-cs360-web.github.io,2024-09-03:/lums-cs360/resources/participation.html</id><summary type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019.
status: published
summary: Old Participation Exercise&lt;/p&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#old-participation-exercises"&gt;Old Participation Exercises&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h3 id="old-participation-exercises"&gt;Old Participation Exercises&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer3.html"&gt;Class Participation Exercise 3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer8.html"&gt;Class Participation Exercise 8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer9.html"&gt;Class Participation Exercise 9&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer10.html"&gt;Class Participation Exercise 10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer11.html"&gt;Class Participation Exercise 11&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer12.html"&gt;Class Participation Exercise 12&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer13.html"&gt;Class Participation Exercise 13&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer15.html"&gt;Class Participation Exercise 15&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer18.html"&gt;Class Participation Exercise 18&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer19.html"&gt;Class Participation Exercise 19&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer20.html"&gt;Class Participation Exercise 20&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer_codeToUML.html"&gt;Class Participation Exercise (Code to UML)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/archive/Class_Participation_Exercise_Proxy_Pattern.html"&gt;Class Participation Exercise (Proxy Pattern)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer_20200406_Long_Method_Refactoring.html"&gt;Class Participation Exercise (Long Method Refactoring)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer_20200408_Refactoring.html"&gt;Class Participation Exercise (Refactoring)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer_sept18.html"&gt;Class Participation Exercise September 18th&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer_sept20.html"&gt;Class Participation Exercise September 20th&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer_sept23.html"&gt;Class Participation Exercise September 23rd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer_oct2.html"&gt;Class Participation Exercise October 2nd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer_march26_Template_Method.html"&gt;Class Participation Exercise March 26th (Template Method)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer_march27.html"&gt;Class Participation Exercise March 27th&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer_march29_Factory_Method_Pattern.html"&gt;Class Participation Exercise March 29th (Factory Method Pattern)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer_20200327_SimpleFactory.html"&gt;Class Participation Exercise Simple Factory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_20200323_MockObjects.html"&gt;Class Participation Exercise Mock Objects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_20200320_CommandPattern.html"&gt;Class Participation Exercise Command Pattern&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/archive/class_participation_exer_designPrinciples.html"&gt;Class Participation Exercise (Design Principles)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="resources"/><category term="resources"/><category term="archive"/><category term="participation"/></entry><entry><title>Practice w23am3q1</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am3q1.html" rel="alternate"/><published>2024-09-03T00:00:00+05:00</published><updated>2024-09-03T00:00:00+05:00</updated><author><name>Ildar Akhmetov</name></author><id>tag:lums-cs360-web.github.io,2024-09-03:/lums-cs360/resources/practice/w23am3q1.html</id><summary type="html">&lt;p&gt;Practice Exam Question&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Scenario to Sequence Diagram&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Convert this scenario into a sequence diagram. Remember to include all the actors, components, lifelines, activation boxes and guards (conditions). Use good names for the methods.  &lt;/p&gt;
&lt;p&gt;&lt;em&gt;My car needs gas, so I drive to the nearest gas station. I swipe my debit card at the pump. The pump connects to the processing center to authorize the card for the default amount of $100, and if there are sufficient funds in my account, the processing center confirms successful authorization. Next, I select Regular and the pump dispenses the selected grade of gasoline. It then asks the processing center to charge my card and receives a transaction ID in response. The pump asks if I want a receipt. The pump prints a receipt only if I tap Yes.&lt;/em&gt;**&lt;/p&gt;</content><category term="practice"/><category term="resources"/><category term="reading"/><category term="references"/><category term="videos"/><category term="practice"/><category term="exams"/></entry><entry><title>Practice w23am3q2</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am3q2.html" rel="alternate"/><published>2024-09-03T00:00:00+05:00</published><updated>2024-09-03T00:00:00+05:00</updated><author><name>Ildar Akhmetov</name></author><id>tag:lums-cs360-web.github.io,2024-09-03:/lums-cs360/resources/practice/w23am3q2.html</id><summary type="html">&lt;p&gt;Practice Exam Question&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Template Method Pattern Refactoring (Java Code to UML Class Diagram)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This code represents a training program that includes two different types of workouts (cardio and strength training).  &lt;/p&gt;
&lt;p&gt;Restructure this code with the template method pattern and provide a UML class diagram depicting the structure and operations one would expect after refactoring this code to &lt;strong&gt;use a template method pattern&lt;/strong&gt;. Your solution must significantly reduce code duplication and enhance reuse.  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You must provide the template method Java code in a UML comment&lt;/strong&gt; (see example below).  &lt;/p&gt;
&lt;p&gt;&lt;img alt="Image" src="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am3q2.png"&gt;&lt;br&gt;
&lt;strong&gt;Draw the resulting UML class diagram of the refactored code.&lt;/strong&gt; Provide the basic abstractions, attributes, methods, relationships, multiplicities, and navigabilities as appropriate.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CardioWorkout&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;doCardioWorkout&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;warmUp&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;stretch&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;warmUp&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Warming up.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Running.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;stretch&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Stretching.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;StrengthWorkout&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;doStrengthWorkout&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;warmUp&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;doPushUps&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;doSquats&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;stretch&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;warmUp&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Warming up.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;doPushUps&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Doing push ups.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;doSquats&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Doing squats.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;stretch&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Stretching.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="practice"/><category term="resources"/><category term="reading"/><category term="references"/><category term="videos"/><category term="practice"/><category term="exams"/></entry><entry><title>Practice w23am3q3</title><link href="https://lums-cs360-web.github.io/lums-cs360/resources/practice/w23am3q3.html" rel="alternate"/><published>2024-09-03T00:00:00+05:00</published><updated>2024-09-03T00:00:00+05:00</updated><author><name>Ildar Akhmetov</name></author><id>tag:lums-cs360-web.github.io,2024-09-03:/lums-cs360/resources/practice/w23am3q3.html</id><summary type="html">&lt;p&gt;Practice Exam Question&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Adapter Design Pattern Refactoring (UML class diagram)&lt;/strong&gt;  &lt;/p&gt;
&lt;p&gt;The code represents the university HR system. There are employees paid hourly (support staff, secretaries, assistants etc.) and students. Some students can be employed as teaching assistants. In this case, their hourly rate depends on their year. The Report class prepares reports on employees and teaching assistants.   &lt;/p&gt;
&lt;p&gt;There is a problem with the &lt;strong&gt;Report&lt;/strong&gt; class as it knows too much about students!   &lt;/p&gt;
&lt;p&gt;Restructure this code with the &lt;strong&gt;Object Adapter design pattern&lt;/strong&gt; and provide a UML class diagram depicting the structure and operations one would expect after refactoring this code to use an object adapter.  &lt;/p&gt;
&lt;p&gt;In your solution, the &lt;strong&gt;Report&lt;/strong&gt; class &lt;strong&gt;must have one (and only one) method&lt;/strong&gt;. Your solution must significantly reduce code duplication and enhance reuse.   &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Draw the resulting UML class diagram of the refactored code.&lt;/strong&gt; Provide the basic abstractions, attributes, methods, relationships, multiplicities, and navigabilities as appropriate.** &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Employee&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jobTitle&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hourlyRate&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getName&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getJobTitle&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jobTitle&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getHourlyRate&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hourlyRate&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Student&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;major&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;year&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getName&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getMajor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;major&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getYear&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;year&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Report&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// Prints report for an employee (hourly staff)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;employeeReport&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Employee&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Name: &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getName&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Job Title: &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getJobTitle&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Hourly Rate: &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getHourlyRate&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// Prints report for a teaching assistant&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;studentReport&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Student&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Name: &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getName&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Job Title: Teaching Assistant&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hourlyRate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getYear&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;hourlyRate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getYear&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;hourlyRate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;hourlyRate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;19&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Hourly Rate: &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hourlyRate&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="practice"/><category term="resources"/><category term="reading"/><category term="references"/><category term="videos"/><category term="practice"/><category term="exams"/></entry><entry><title>Project Demo Schedule</title><link href="https://lums-cs360-web.github.io/lums-cs360/projects/project_demo.html" rel="alternate"/><published>2024-08-28T00:00:00+05:00</published><updated>2024-08-28T00:00:00+05:00</updated><author><name>LUMS</name></author><id>tag:lums-cs360-web.github.io,2024-08-28:/lums-cs360/projects/project_demo.html</id><summary type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019.
status: published
summary: Project Demo Schedule
[TOC]&lt;/p&gt;
&lt;h3 id="project-demo-schedule"&gt;Project Demo Schedule&lt;/h3&gt;</content><category term="projects"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>Lab 5 Instructions</title><link href="https://lums-cs360-web.github.io/lums-cs360/labs/lab5_instruct.html" rel="alternate"/><published>2024-08-26T00:00:00+05:00</published><updated>2024-08-26T00:00:00+05:00</updated><author><name>LUMS</name></author><id>tag:lums-cs360-web.github.io,2024-08-26:/lums-cs360/labs/lab5_instruct.html</id><summary type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019.
status: published
summary: Lab 5 Instructions
[TOC]&lt;/p&gt;
&lt;h3 id="lab-5-instructions"&gt;Lab 5 Instructions&lt;/h3&gt;
&lt;p&gt;Read &lt;a href="https://lums-cs360-web.github.io/lums-cs360/labs/slides/Firestore.pdf"&gt;Firestore 🔥.pdf&lt;/a&gt; for introduction of Firestore
Follow instructions on &lt;a href="https://lums-cs360-web.github.io/lums-cs360/labs/slides/Lab5.pdf"&gt;Lab 5 Firestore Integration Instructions.pdf&lt;/a&gt; along with the TA.
Complete Lab Exercise.&lt;/p&gt;
&lt;p&gt;Download Starter Code &lt;a href="https://github.com/cmput301-f25/Lab05"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="lab-5-participation-exercise"&gt;Lab 5 Participation Exercise&lt;/h3&gt;
&lt;p&gt;Proper completion of this exercise is considered as part of course participation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this exercise it is your task to add the ability to delete Cities and integrate this functionality with the Firestore database, allowing for the persistence of deletions.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;After applying the changes in the lab demo &lt;a href="https://lums-cs360-web.github.io/lums-cs360/labs/slides/Lab5FIntegNew.pdf"&gt;(LINK TO INSTRUCTIONS)&lt;/a&gt;, add the ability to delete cities from the ListView and apply these same deletions to your instance of the Firestore database. If you have implemented this functionality correctly, restarting your app should not have an impact on what cities are displayed in your ListView after any addition or deletion actions.&lt;/p&gt;
&lt;h4 id="note-the-design-of-the-deletion-functionality-is-up-to-you-however-we-have-uploaded-a-few-mockups-to-give-you-some-ideas"&gt;&lt;strong&gt;Note: the design of the deletion functionality is up to you, however, we have uploaded a few mockups to give you some ideas.&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img alt="Screen1" src="https://lums-cs360-web.github.io/lums-cs360/labs/lab5_img1.png" style="margin: 20px;" width="300"&gt;
&lt;img alt="Screen2" src="https://lums-cs360-web.github.io/lums-cs360/labs/lab5_img2.png" style="margin: 20px;" width="300"&gt;
&lt;img alt="Screen3" src="https://lums-cs360-web.github.io/lums-cs360/labs/lab5_img3.png" style="margin: 20px;" width="300"&gt;&lt;/p&gt;
&lt;h3 id="submission"&gt;Submission&lt;/h3&gt;
&lt;p&gt;LMS&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Due Date&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tuesday 5PM&lt;/p&gt;</content><category term="labs"/><category term="labs"/><category term="policy"/><category term="grading"/></entry><entry><title>Lab 6 Instructions</title><link href="https://lums-cs360-web.github.io/lums-cs360/labs/lab6_instruct.html" rel="alternate"/><published>2024-08-26T00:00:00+05:00</published><updated>2024-08-26T00:00:00+05:00</updated><author><name>LUMS</name></author><id>tag:lums-cs360-web.github.io,2024-08-26:/lums-cs360/labs/lab6_instruct.html</id><summary type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019.
status: published
summary: Lab 6 Instructions
[TOC]&lt;/p&gt;
&lt;h3 id="lab-6-instructions"&gt;Lab 6 Instructions&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Follow the slides on &lt;a href="https://lums-cs360-web.github.io/lums-cs360/labs/slides/Javadoc.pdf"&gt;Javadoc&lt;/a&gt; and &lt;a href="https://lums-cs360-web.github.io/lums-cs360/labs/slides/JUnit.pdf"&gt;JUnit&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Follow instructions on this &lt;a href="https://lums-cs360-web.github.io/lums-cs360/labs/slides/Lab_6_Instructions_F24_updated.pdf"&gt;link&lt;/a&gt; along with the TA.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Complete Lab Exercise.  &lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="some-known-issues"&gt;Some known issues:&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;"test events were not received" --&amp;gt; Solution: &lt;a href="https://stackoverflow.com/a/73009440/1496554"&gt;link&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;"Error creating JavaDoc" --&amp;gt; Solution: &lt;a href="https://stackoverflow.com/a/73102343/1496554"&gt;link&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="lab-6-participation-exercise"&gt;Lab 6 Participation Exercise&lt;/h3&gt;
&lt;p&gt;Proper completion of this exercise is considered as part of course participation.&lt;/p&gt;
&lt;p&gt;In this exercise your task is to &lt;strong&gt;implement and test&lt;/strong&gt; the following methods in the CityList class &lt;strong&gt;AND create Javadocs&lt;/strong&gt; for the main source files (not tests):&lt;/p&gt;
&lt;p&gt;1) Implement and test these methods:
    - hasCity(City city)
        - When given a city, return whether or not it belongs in the list&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;    &lt;span class="k"&gt;-&lt;/span&gt; Test to see whether your method is correct (Read https://www.infoworld.com/article/3305792/comparing-java-objects-with-equals-and-hashcode.html) delete(City city)

    &lt;span class="k"&gt;-&lt;/span&gt; Check if a city is present in the list. If it does then remove it from the list, if not then **throw an exception**

    &lt;span class="k"&gt;-&lt;/span&gt; Test to see if your method actually removes it from the list

    &lt;span class="k"&gt;-&lt;/span&gt; Test to see if the exception is actually thrown (Read more here https://howtodoinjava.com/junit5/expected-exception-example/) countCities()

    &lt;span class="k"&gt;-&lt;/span&gt; Return how many cities are in the list

    &lt;span class="k"&gt;-&lt;/span&gt;  Test to see whether your method is correct
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;2) Add Javadocs to all methods in CityList class and City class &lt;strong&gt;AND&lt;/strong&gt; generate the javadocs to &lt;project-name&gt;/app/javadocs&lt;/p&gt;
&lt;h3 id="submission"&gt;Submission&lt;/h3&gt;
&lt;p&gt;LMS&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Due Date&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tuesday 5PM&lt;/p&gt;</content><category term="labs"/><category term="labs"/><category term="policy"/><category term="grading"/></entry><entry><title>Lab 7 Instructions</title><link href="https://lums-cs360-web.github.io/lums-cs360/labs/lab7_instruct.html" rel="alternate"/><published>2024-08-26T00:00:00+05:00</published><updated>2024-08-26T00:00:00+05:00</updated><author><name>LUMS</name></author><id>tag:lums-cs360-web.github.io,2024-08-26:/lums-cs360/labs/lab7_instruct.html</id><summary type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019.
status: published
summary: Lab 7 Instructions
[TOC]&lt;/p&gt;
&lt;h3 id="lab-7-instructions"&gt;Lab 7 Instructions&lt;/h3&gt;
&lt;h4 id="lab-topicdemo"&gt;Lab Topic/Demo&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/labs/slides/Lab7.pdf"&gt;Lab7 Instructions-Android UI Testing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/natewu/cmput301-lab7-starter"&gt;Lab 7 Starter Code&lt;/a&gt; (clone this repo)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/labs/slides/Lab_7_starter_code.zip"&gt;Lab 7 Starter Code Download&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="lab-7-participation-exercise"&gt;Lab 7 Participation Exercise&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;# Implement and test activity:&lt;/strong&gt;
ShowActivity (create by yourself to have the following property)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;- By clicking on the city list, the UI should change to another activity which is &amp;quot;ShowActivity&amp;quot;

- The activity shows the city name you have clicked on

- Create a back button which goes back to MainActivity
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;# Test: (create 3 test cases/functions to test the 3 following functionalities)&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;- Check whether the activity correctly switched

- Test whether the city name is consistent

- Test the &amp;quot;back&amp;quot; button
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3 id="submission"&gt;Submission&lt;/h3&gt;
&lt;p&gt;LMS&lt;/p&gt;
&lt;p&gt;&lt;img alt="Screen1" src="https://lums-cs360-web.github.io/lums-cs360/labs/lab7_img1.png" style="margin: 20px;" width="300"&gt;
&lt;img alt="Screen2" src="https://lums-cs360-web.github.io/lums-cs360/labs/lab7_img2.png" style="margin: 20px;" width="300"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Due Date&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tuesday 5PM&lt;/p&gt;</content><category term="labs"/><category term="labs"/><category term="policy"/><category term="grading"/></entry><entry><title>Lab 8 Participation Exercise</title><link href="https://lums-cs360-web.github.io/lums-cs360/labs/lab8_part.html" rel="alternate"/><published>2024-08-26T00:00:00+05:00</published><updated>2024-08-26T00:00:00+05:00</updated><author><name>LUMS</name></author><id>tag:lums-cs360-web.github.io,2024-08-26:/lums-cs360/labs/lab8_part.html</id><summary type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019.
status: published
summary: Lab 8 Participation Exercise&lt;/p&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#lab-8-instructions"&gt;Lab 8 Instructions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#lab-8-slides"&gt;Lab 8 Slides&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#updated-slides"&gt;Updated Slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#original-slides"&gt;Original Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#lab-8-instructions_1"&gt;Lab 8 Instructions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#lab-8-participation-exercise"&gt;Lab 8 Participation Exercise&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#submission"&gt;Submission&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h3 id="lab-8-instructions"&gt;Lab 8 Instructions&lt;/h3&gt;
&lt;p&gt;In this lab, we will learn about test driven development (TDD) and continuous integration (CI). These are both solutions for solving some common software engineering problems using unit testing. We will go through the slides (updated version) posted below, and go through a live demo in class based on the instructions below to show you how to use TDD and CI.&lt;/p&gt;
&lt;h3 id="lab-8-slides"&gt;Lab 8 Slides&lt;/h3&gt;
&lt;h4 id="updated-slides"&gt;Updated Slides&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;These slides are based on the original slides posted below, but have a couple more diagrams and a more concise format. If you want to read more about the topic, check out the original slides.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/labs/slides/Lab8.pdf"&gt;Lab 8 Updated Slides&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="original-slides"&gt;Original Slides&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/labs/slides/Lab8_Slides.pdf"&gt;Lab 8 Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="lab-8-instructions_1"&gt;Lab 8 Instructions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/labs/slides/Lab8_Instructions.pdf"&gt;Lab 8 Instructions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="lab-8-participation-exercise"&gt;Lab 8 Participation Exercise&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Lab Exercise&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;• Implement has city, delete city, and count cities (same as lab 6), however, this time using TDD.&lt;/p&gt;
&lt;p&gt;• Create each functionality one at a time, creating (and pushing) a test to create a failing build, before adding functionality to make it pass.&lt;/p&gt;
&lt;p&gt;• e.g., create hasCity test, push for failing build, write functionality for hasCity to make passing build. Repeat for delete city and count cities.&lt;/p&gt;
&lt;h3 id="submission"&gt;Submission&lt;/h3&gt;
&lt;p&gt;LMS&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Due Date&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tuesday 5PM&lt;/p&gt;</content><category term="labs"/><category term="labs"/><category term="policy"/><category term="grading"/></entry><entry><title>Project Part 0</title><link href="https://lums-cs360-web.github.io/lums-cs360/projects/project_part0.html" rel="alternate"/><published>2024-08-26T00:00:00+05:00</published><updated>2024-08-26T00:00:00+05:00</updated><author><name>LUMS</name></author><id>tag:lums-cs360-web.github.io,2024-08-26:/lums-cs360/projects/project_part0.html</id><summary type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019.
status: published
summary: Project Part 0&lt;/p&gt;
&lt;hr&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#team-members"&gt;Team Members&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#what-to-submit"&gt;What to submit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#submission-procedure"&gt;Submission Procedure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#marking"&gt;Marking&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Due date:&lt;/strong&gt; Check the &lt;a href="https://lums-cs360-web.github.io/lums-cs360/#schedule"&gt;schedule&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="team-members"&gt;Team Members&lt;/h3&gt;
&lt;p&gt;Project teams consist of 5 members and each member must be registered in the &lt;strong&gt;same lab section.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The intent is that all members are available together for a good block of time during the week, to regularly meet their assigned TA, and to attend their project demos in their registered lab, without potentially overloading the lab section.&lt;/p&gt;
&lt;p&gt;For an initial teamwork exercise you will be asked to pick a team name according to the exact specifications below.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you have fewer than 5 members, you may be split up and assigned to other teams.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="what-to-submit"&gt;What to submit&lt;/h3&gt;
&lt;p&gt;Every team member will need to submit the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The lab section (Wednesday/Thursday)&lt;/li&gt;
&lt;li&gt;Each team member's ROLLNUM&lt;/li&gt;
&lt;li&gt;Each team member's name&lt;/li&gt;
&lt;li&gt;Each team member's GitHub username&lt;/li&gt;
&lt;li&gt;A proposed team name&lt;ul&gt;
&lt;li&gt;Good examples: &lt;code&gt;kakuna&lt;/code&gt;, &lt;code&gt;helium&lt;/code&gt;, &lt;code&gt;orchid&lt;/code&gt;, &lt;code&gt;magnet&lt;/code&gt;, &lt;code&gt;indigo&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Exactly six (6) ASCII lowercase letters&lt;/li&gt;
&lt;li&gt;A single English word&lt;/li&gt;
&lt;li&gt;Must be professional&lt;ul&gt;
&lt;li&gt;Sexism/Racism/etc. or any other harassment will be brought to the Dean of Students for sanctions&lt;/li&gt;
&lt;li&gt;Must not contain any insults or negativity. Examples: &lt;code&gt;suckers&lt;/code&gt;, &lt;code&gt;copium&lt;/code&gt;, &lt;code&gt;haters&lt;/code&gt;, &lt;code&gt;betray&lt;/code&gt;, &lt;code&gt;regret&lt;/code&gt;, &lt;code&gt;losers&lt;/code&gt;...&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Must not contain anyone's name as a substring&lt;/li&gt;
&lt;li&gt;Should be unique&lt;ul&gt;
&lt;li&gt;Words like &lt;code&gt;heroes&lt;/code&gt;, &lt;code&gt;awesome&lt;/code&gt;, are overused: they'll be accepted but might conflict with another team, if they conflict, the second team to submit will be assigned a different name.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="submission-procedure"&gt;Submission Procedure&lt;/h3&gt;
&lt;p&gt;All members of the team must submit the Google Form: &lt;a href="https://forms.gle/vx9h2PrjjUvGVJEG8"&gt;Form&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="marking"&gt;Marking&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;If you do not form a team before the due date, you will receive a mark of zero.&lt;/li&gt;
&lt;li&gt;If you do not submit on time, you will receive a mark of zero. No late submissions are allowed. No extensions will be granted.&lt;/li&gt;
&lt;li&gt;Every team member must submit. If you don't submit you will receive a mark of zero even if your other team members submitted.&lt;/li&gt;
&lt;li&gt;You will be deducted one mark for each violation of the required submission format!&lt;ul&gt;
&lt;li&gt;This also includes violating the team name format&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="projects"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>Project Part 2</title><link href="https://lums-cs360-web.github.io/lums-cs360/projects/project_part2.html" rel="alternate"/><published>2024-08-26T00:00:00+05:00</published><updated>2024-08-26T00:00:00+05:00</updated><author><name>LUMS</name></author><id>tag:lums-cs360-web.github.io,2024-08-26:/lums-cs360/projects/project_part2.html</id><summary type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019.
status: published
summary: Project Part 2
[TOC]&lt;/p&gt;
&lt;h3 id="project-part-2-preparation"&gt;Project Part 2 -- Preparation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Due date:&lt;/strong&gt; Check the &lt;a href="https://lums-cs360-web.github.io/lums-cs360/#schedule"&gt;schedule&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="learning-objectives"&gt;&lt;strong&gt;Learning Objectives&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Refine requirements&lt;/li&gt;
&lt;li&gt;Apply object-oriented analysis and design&lt;/li&gt;
&lt;li&gt;Prototype a user interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="overview"&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;The project description outlines the problem and a set of needs. The entire project has several deliverables. Subsequent deliverables may be further refinements of earlier ones, and should address any TA feedback or concerns. This project part focuses on some initial preparations.&lt;/p&gt;
&lt;h4 id="deliverables"&gt;Deliverables&lt;/h4&gt;
&lt;p&gt;The following components are required for this project part.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Product Backlog:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Form the initial partial user stories into a backlog of the product's requirements. For each user story, estimate its size in story points, and denote its risk level (i.e., low, medium, or high). These requirements will likely evolve and should be maintained up-to-date throughout the project. Make sure they are numbered for easy reference. Note which stories will be released for the half-way checkpoint.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. User Interface Mockups and Storyboard Sequences:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Diagram the layout of your main user interface and major dialogs, with comments describing the important elements. Also, diagram storyboard sequences of using your application, with transitions between different states of the user interface, caused by the user manipulating the controls or providing input. Within the diagrams, reference the relevant requirements. Convincingly show all the requirements are covered.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Object-Oriented Analysis:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Document your initial object-oriented analysis using CRC cards, focusing on the most important anticipated classes, their responsibilities, and collaborators.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Tool use:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Regular and consistent use of GitHub by all team members to share files for the project deliverables, to effectively track issues, and to manage tasks.&lt;/p&gt;
&lt;h4 id="hints"&gt;Hints&lt;/h4&gt;
&lt;p&gt;Ask questions about the requirements. Your interpretation of a need or task may be more complex or sophisticated than what is actually desired. Involve the TA for your team to gain feedback on your deliverables.&lt;/p&gt;
&lt;p&gt;For neatness and readability, diagrams must be drawn well using a computer tool at a suitably legible scale for insertion into your document(s). Submitted diagram(s) must be embedded as image(s) in your team wiki, not linked externally.&lt;/p&gt;
&lt;p&gt;You should look ahead to the future project parts and their deliverables to know what is coming. Do not wait until this part's deliverables are due before working on the next part.&lt;/p&gt;
&lt;p&gt;Very likely, the requirements and user interface design will need to evolve during the project. You should keep this information up-to-date so that your team members are properly coordinated.&lt;/p&gt;
&lt;h4 id="submission-procedure"&gt;Submission Procedure&lt;/h4&gt;
&lt;p&gt;Use GitHub. Your team repo must be self-contained, i.e., not link to external content that might change.&lt;/p&gt;
&lt;h4 id="individual-task-and-peer-review-form"&gt;Individual Task and Peer Review Form&lt;/h4&gt;
&lt;p&gt;After the due date, each member must complete an assessment form to describe his or her individual contribution to the project for this stage, and to review the performance of the other members: https://forms.gle/oJj2AAmdiXL7tybu9
Deadline to complete the form and submit it is 11:59 PM Tuesday 10 March&lt;/p&gt;
&lt;h4 id="marking"&gt;Marking&lt;/h4&gt;
&lt;p&gt;Each component of your deliverable will be evaluated individually based on the following rubric:&lt;/p&gt;
&lt;p&gt;No part marks, no extra marks. No half marks.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Failure (0) : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Incomplete. Missing important components.&lt;/li&gt;
&lt;li&gt;Or no submission&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unsatisfactory (2)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A project submission that is missing components. Inconsistency is key. Missing important test cases. Lack of planning or adherence. Lack of attendance etc. Must demonstrate clear understanding of purpose and rationale behind deliverables.&lt;/li&gt;
&lt;li&gt;Or A project that effort has been put into and doesn't meet the requirements described. Most deliverable points have been met.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Satisfactory (3)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A project submission that is missing minor components and contains some rough elements, but is NOT missing anything major. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Good (4)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A not-quite excellent submission that meets the majority of all the requirements without problem.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Excellent (5)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A excellent submission that meets the all the requirements without problem.&lt;/li&gt;
&lt;li&gt;A flawless project that meets the requirements described. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="projects"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>Project Part 3</title><link href="https://lums-cs360-web.github.io/lums-cs360/projects/project_part3.html" rel="alternate"/><published>2024-08-26T00:00:00+05:00</published><updated>2024-08-26T00:00:00+05:00</updated><author><name>LUMS</name></author><id>tag:lums-cs360-web.github.io,2024-08-26:/lums-cs360/projects/project_part3.html</id><summary type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019.
status: published
summary: Project Part 3
[TOC]&lt;/p&gt;
&lt;h3 id="project-part-3-half-way-checkpoint"&gt;Project Part 3 -- Half-Way Checkpoint&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Due date:&lt;/strong&gt; Check the &lt;a href="https://lums-cs360-web.github.io/lums-cs360/#schedule"&gt;schedule&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="learning-objectives"&gt;&lt;strong&gt;Learning Objectives&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Develop a usable, interactive, mobile application.&lt;/li&gt;
&lt;li&gt;Refine object-oriented design.&lt;/li&gt;
&lt;li&gt;Produce tests.&lt;/li&gt;
&lt;li&gt;Follow scrum practices.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="overview"&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;This project part focuses on a working prototype with about half of the requirements. You must have some server connectivity working by this part.&lt;/p&gt;
&lt;h4 id="deliverables"&gt;&lt;strong&gt;Deliverables&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;1. Addressing Feedback:&lt;/strong&gt;
Address any TA feedback on the previous project part.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Code Base of Prototype:&lt;/strong&gt;
Your source code will be inspected. The code should conform to some consistent coding convention. Your prototype should provide something tangible to the user, supporting about half the requirements. Maintain the source code in your source repository.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Code Documentation:&lt;/strong&gt;
For each source code file, you should have a brief introductory comment describing its purpose or role within the application or a design pattern, as well as any currently outstanding issues. Provide Javadoc interface documentation for your model classes and their public methods (at least).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Test Cases:&lt;/strong&gt;
Write runnable tests for your model and control classes. Provide intent tests for the requirements you have done. Deliver the test code to your source repository. If you have test data files, also include those. Test data should be realistic.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5. Object-Oriented Design:&lt;/strong&gt;
Document your object-oriented design using a UML class diagram (or diagrams), including details on key attributes and methods. Add notes as appropriate to clarify. The diagram(s) will likely evolve.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6. Product Backlog:&lt;/strong&gt;
Update the requirements as appropriate. Note which user stories are done at this checkpoint.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;7. User Interface Mockups and Storyboard Sequences:&lt;/strong&gt;
Update these diagrams as appropriate.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;8. Sprint Planning and Reviews:&lt;/strong&gt;
Maintain a record of what user stories are planned for each weekly sprint at its start, including who is to work on them. For each intermediate week, in the lab, have a sprint review with your TA mentor and all team members present to review the completed user stories.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;9. Demonstration:&lt;/strong&gt;
During your team's assigned lab section after the due date (or possibly at a mutually arranged time), you must demo your working prototype to your TA mentor. All team members have to attend the demo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;10. Tool use:&lt;/strong&gt;
Regular and consistent use of GitHub by all team members to share files for the project deliverables, to effectively track issues, and to manage tasks.&lt;/p&gt;
&lt;p&gt;There must be consistency across the deliverables at this checkpoint.&lt;/p&gt;
&lt;p&gt;The evaluation of this project part will also include a component called "relative quality". This is used to differentiate projects that meet the minimum from projects that go "the extra mile".&lt;/p&gt;
&lt;h4 id="restrictions"&gt;Restrictions&lt;/h4&gt;
&lt;p&gt;Use Java, with Android, and Firestore.&lt;/p&gt;
&lt;h4 id="hints"&gt;Hints&lt;/h4&gt;
&lt;p&gt;Integrate early and often, even if some parts may have to be stubbed out to return canned data. Think about issues like server connectivity early in the design, rather than trying to retrofit them later.&lt;/p&gt;
&lt;h4 id="submission-procedure"&gt;Submission Procedure&lt;/h4&gt;
&lt;p&gt;Use GitHub. Your team repo must be self-contained, i.e., not link to external content that might change.&lt;/p&gt;
&lt;p&gt;Please make sure your repository has the right version of code by the deadline. The TA will try to build your program from the submitted code. The TA may contact you if there are build issues.&lt;/p&gt;
&lt;p&gt;If you reuse software, give proper credit to the original developers. Obtain approval for the use of third-party libraries as appropriate.&lt;/p&gt;
&lt;h4 id="individual-task-and-peer-review-form"&gt;Individual Task and Peer Review Form&lt;/h4&gt;
&lt;p&gt;After the due date, each member must complete an assessment form to describe his or her individual contribution to the project for this stage, and to review the performance of the other members.&lt;/p&gt;
&lt;h4 id="marking"&gt;Marking&lt;/h4&gt;
&lt;p&gt;No part marks, no extra marks. No half marks.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Failure (0) : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Incomplete. Missing important components.&lt;/li&gt;
&lt;li&gt;Or no submission&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unsatisfactory (5)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A project submission that is missing components. Inconsistency is key. Missing important test cases. Lack of planning or adherence. Lack of attendance etc. Must demonstrate clear understanding of purpose and rationale behind deliverables.&lt;/li&gt;
&lt;li&gt;Or A project that effort has been put into and doesn't meet the requirements described. Most deliverable points have been met.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Satisfactory (7)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A project submission that is missing minor components and contains some rough elements, but is NOT missing anything major. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Good (8)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A not-quite excellent submission that meets the majority of all the requirements without problem.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Excellent (10)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A excellent submission that meets the all the requirements without problem.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="projects"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>Project Part 4</title><link href="https://lums-cs360-web.github.io/lums-cs360/projects/project_part4.html" rel="alternate"/><published>2024-08-26T00:00:00+05:00</published><updated>2024-08-26T00:00:00+05:00</updated><author><name>LUMS</name></author><id>tag:lums-cs360-web.github.io,2024-08-26:/lums-cs360/projects/project_part4.html</id><summary type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019.
status: published
summary: Project Part 4
[TOC]&lt;/p&gt;
&lt;h3 id="project-part-4-final-checkpoint"&gt;Project Part 4 -- Final Checkpoint&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Due date:&lt;/strong&gt; Check the &lt;a href="https://lums-cs360-web.github.io/lums-cs360/#schedule"&gt;schedule&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="learning-objectives"&gt;&lt;strong&gt;Learning Objectives&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Develop a usable, interactive, mobile application.&lt;/li&gt;
&lt;li&gt;Produce a product demonstration.&lt;/li&gt;
&lt;li&gt;Follow scrum practices.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="overview"&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Your product is ready to be released!&lt;/p&gt;
&lt;p&gt;Most deliverables are final, consistent updates of what was initiated for the previous project part.&lt;/p&gt;
&lt;h4 id="deliverables"&gt;&lt;strong&gt;Deliverables&lt;/strong&gt;&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Addressing feedback:&lt;/strong&gt;
Address any TA feedback on the previous project part.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Code Base of Prototype:&lt;/strong&gt;
Your source code will be inspected. The code should conform to some consistent coding convention. Maintain the source code in your source repository.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Code Documentation:&lt;/strong&gt;
For each source file, you should have a brief introductory comment describing its purpose or role within the application or a design pattern, as well as any currently outstanding issues. Provide Javadoc interface documentation for your model classes and their public methods (at least).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Test Cases:&lt;/strong&gt;
Write runnable tests for your model and control classes. Provide intent tests for the requirements you have done. Deliver the test code to your source repository. If you have test data files, also include those. Test data should be realistic.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Object-Oriented Design:&lt;/strong&gt;
Update your object-oriented design using a UML class diagram (or diagrams), including details on key attributes and methods. Add notes as appropriate to clarify. Include notes on the use of design patterns among the classes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Product Backlog:&lt;/strong&gt;
Update the requirements as appropriate. Note which user stories are done at this checkpoint.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;User Interface Mockups and Storyboards:&lt;/strong&gt;
Update these diagrams as appropriate.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sprint Planning and Reviews:&lt;/strong&gt;
Maintain a record of what user stories are planned for each weekly sprint at its start, including who is to work on them. For each intermediate week, in the lab, have a sprint review with your TA mentor and all team members present to review the completed user stories.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Demonstration:&lt;/strong&gt;
Present an engaging demo. The final demo of your final prototype should show the usability of its user interface and the degree to which its functionality fulfills the user's needs. All team members must contribute to the demo. During the last week of labs you and your team will present this demo in less than 3 minutes to the entire lab. It will be your app live, with your team members. No videos, audio, or powerpoint. Just your live app. Make backup videos of the functionality in case your demo fails. Practice your demo in the lab room ahead of time. Make sure you can present your app by testing the projector and your devices the week before. All teams should participate and be present. Aim for live presentation in 3 minutes. Do not leave early.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Tool Use:&lt;/strong&gt;
Regular and consistent use of GitHub by all team members to share files for the project deliverables, to effectively track issues, and to manage tasks.
There must be consistency across the deliverables at this checkpoint.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The evaluation of this project part will also include a component called "relative quality". This is used to differentiate projects that meet the minimum from projects that go "the extra mile".&lt;/p&gt;
&lt;h4 id="restrictions"&gt;&lt;strong&gt;Restrictions&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Use Java, with Android, and Firestore.&lt;/p&gt;
&lt;h4 id="submission-procedure"&gt;&lt;strong&gt;Submission Procedure&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Use GitHub. Your team repo must be self-contained, i.e., not link to external content that might change.&lt;/p&gt;
&lt;p&gt;Please make sure your repository has the right version of code by the deadline. The TA will try to build your program from the submitted code. The TA may contact you if there are build issues.&lt;/p&gt;
&lt;p&gt;If you reuse software, give proper credit to the original developers. Obtain approval for the use of third-party libraries as appropriate.&lt;/p&gt;
&lt;p&gt;This demo should have a logical flow in what is presented (following a story about what a user would naturally do, not just enumerating assorted features).&lt;/p&gt;
&lt;h4 id="individual-task-and-peer-review-form"&gt;&lt;strong&gt;Individual Task and Peer Review Form&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;After the due date, each member must complete an assessment form to describe his or her individual contribution to the project for this stage, and to review the performance of the other members.&lt;/p&gt;
&lt;h4 id="marking"&gt;Marking&lt;/h4&gt;
&lt;p&gt;No part marks, no extra marks. No half marks.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Failure (0) : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Incomplete. Missing important components.&lt;/li&gt;
&lt;li&gt;Or no submission&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unsatisfactory (8)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A project submission that is missing components. Inconsistency is key. Missing important test cases. Lack of planning or adherence. Lack of attendance etc. Must demonstrate clear understanding of purpose and rationale behind deliverables.&lt;/li&gt;
&lt;li&gt;A project that effort has been put into and doesn't meet the requirements described. Most deliverable points have been met.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Satisfactory (11)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A project submission that is missing minor components and contains some rough elements, but is NOT missing anything major. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Good (14)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A not-quite excellent submission that meets the majority of all the requirements without problem.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Excellent (16)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A excellent submission that meets the all the requirements without problem.&lt;/li&gt;
&lt;li&gt;A flawless project that meets the requirements described. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="projects"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>Project Problem Description</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/project_problem_descr_W2024.html" rel="alternate"/><published>2024-08-26T00:00:00+05:00</published><updated>2024-08-26T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-08-26:/lums-cs360/archive/project_problem_descr_W2024.html</id><summary type="html">&lt;p&gt;Project Problem Description&lt;/p&gt;</summary><content type="html">&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#project-problem-description"&gt;Project Problem Description&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#event-lottery-system-application"&gt;Event Lottery System Application&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#description"&gt;Description:&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#features"&gt;Features:&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h3 id="project-problem-description"&gt;Project Problem Description&lt;/h3&gt;
&lt;p&gt;Warning: This is subject to change!&lt;/p&gt;
&lt;h4 id="event-lottery-system-application"&gt;&lt;strong&gt;Event Lottery System Application&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;You are to design and implement a simple, attractive, and easy-to-use Android application to satisfy the following goals. Your design must be flexible enough to allow developers to extend or migrate it.&lt;/p&gt;
&lt;h4 id="description"&gt;&lt;strong&gt;Description:&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;We want a mobile application where people can sign up for events at community centres that are popular and fill up fast. We want to allow people with limitations such as work, disability, etc. to be able to sign up for these events fairly and not have to sit refreshing a webpage until they can get a chance at reserving a spot.&lt;/p&gt;
&lt;p&gt;How? Lottery! If I am running swimming lessons for 20 kids, I will post my event or series of events and I will let everyone join the waiting list for a period of a week. After the week is up, I will ask the system to choose 20 kids to sign up. The system will then notify these kids (or their guardians), if they say no they don’t want swimming lessons, then the system will sample another child to sign up. I can monitor the progress and then get access to the final list of everyone who signs up. If perhaps someone cancels later I can cancel them in the app and a new applicant is drawn.&lt;/p&gt;
&lt;p&gt;Lottery systems are great because you don’t have to first get a chance to go to an event, you just have to say you are interested and if you’re lucky you will be offered a chance. This gives people who need the time, the time to sign up properly without a time pressure. Accessibility!&lt;/p&gt;
&lt;h4 id="features"&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Pooling System:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Organizers can draw from a waiting list of interested event attendees as selected participants.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;QR Code Scanning:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;entrants can scan QR promotional code to view details about the event and also join the waiting list&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Firebase Integration:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Utilize Firebase for storing event details, attendee lists, and real-time check-in status updates.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Multi-User Interaction:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Distinguish between entrants, organizers, and admin with special roles and privileges granted to each actor.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Image Upload:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Allow event organizers upload event poster image&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Geolocation Verification (Optional)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Optionally use geolocation to verify where users are joining the waiting list from. This is the location provided by the device.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Scenario:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;I want to sign my partner up to swim lessons, they need to learn how to swim if they are going to go canoeing with me. I go to the local rec centre, I see they have listed swimming lessons for beginners, I scan the QR code. I see that it is open to register for 2 more days. I click register. 2 days later when it is closed the system samples people, but not me. It notifies me that I wasn’t sampled in the first draw, but there might be a chance if someone declines. Nobody declines. Boo.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I am running an interpretive dance class where I teach the safety basics of dance (no eye gouging, that kind of stuff). I tell the app that I have classes every monday From 2025-01-01 to 2025-03-01, and that you need to register by 2024-12-15 and registration opens on 2024-12-01. The price is $60 and I can accommodate 60 people. I click publish and now an event is made where people can join the waiting list and they get this basic information. Also a QR code is generated that will lead them to this page.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I want to sign my partner up to piano lessons, they need to learn how to play if they are going to play piano with me. I go to the app, I go to my local rec centre, I see they have listed piano lessons for beginners, I scan the QR code. I see that it is open to register for 2 more days. I click register. 2 days later when it is closed the system samples people, but not me. It notifies me that I was sample.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Actors:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Entrant: a person who signs up for an event&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Organizer: the entity that runs the event&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Administrator: The entity that administers and runs the infrastructure&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Glossary:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;QR Code: a scannable code, either a barcode, a QR code, or other code scannable by Zebra crossing libraries or google QR code scanning libraries.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Entrant: someone who declares their interest in signing up for an event by joining the waiting list&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Waiting List: a record of entrants that showed interest in a specific event&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sign Up : An action of registering/confirming for an event when successfully selected&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can think of this like accepting an invitation.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Profile : A screen on the application that holds information about an entrant&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Choosing: Randomly selecting a number of entrants in the waiting list to be invited to sign up&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;User Stories:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;User needs are expressed in the form of partial user stories:&lt;/p&gt;
&lt;p&gt;As a (role), I want (goal).&lt;/p&gt;
&lt;p&gt;These descriptions may change to correct omissions and clarify noticed issues. New requirements will be introduced for the final project part.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;User:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;US 01.01.01 As an entrant, I want to join the waiting list for a specific event&lt;/p&gt;
&lt;p&gt;US 01.01.02 As an entrant, I want to leave the waiting list for a specific event &lt;/p&gt;
&lt;p&gt;US 01.02.01 As an entrant, I want to provide my personal information such as name, email and optional phone number in the app&lt;/p&gt;
&lt;p&gt;US 01.02.02 As an entrant I want to update information such as name, email and contact information on my profile&lt;/p&gt;
&lt;p&gt;US 01.03.01 As an entrant I want to upload a profile picture for a more personalized experience&lt;/p&gt;
&lt;p&gt;US 01.03.02 As an entrant I want remove profile picture if need be&lt;/p&gt;
&lt;p&gt;US 01.03.03 As an entrant I want my profile picture to be deterministically generated from my profile name if I haven't uploaded a profile image yet.&lt;/p&gt;
&lt;p&gt;US 01.04.01 As an entrant I want to receive notification when chosen from the waiting list (when I "win" the lottery)&lt;/p&gt;
&lt;p&gt;US 01.04.02 As an entrant I want to receive notification of not chosen on the app (when I "lose" the lottery)&lt;/p&gt;
&lt;p&gt;US 01.04.03 As an entrant I want to opt out of receiving notifications from organizers and admin&lt;/p&gt;
&lt;p&gt;US 01.05.01 As an entrant I want another chance to be chosen from the waiting list if a selected user declines an invitation to sign up&lt;/p&gt;
&lt;p&gt;US 01.05.02 As an entrant I want to be able to accept the invitation to register/sign up when chosen to participate in an event&lt;/p&gt;
&lt;p&gt;US 01.05.03 As an entrant I want to be able to decline an invitation when chosen to participate in an event&lt;/p&gt;
&lt;p&gt;US 01.06.01 As an entrant I want to view event details within the app by scanning the promotional QR code&lt;/p&gt;
&lt;p&gt;US 01.06.02 As an entrant I want to be able to be sign up for an event by scanning the QR code&lt;/p&gt;
&lt;p&gt;US 01.07.01 As an entrant, I want to be identified by my device, so that I don't have to use a username and password&lt;/p&gt;
&lt;p&gt;US 01.08.01 As an entrant, I want to be warned before joining a waiting list that requires geolocation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Organizer:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;US 02.01.01 As an organizer I want to create a new event and generate a unique promotional QR code that links to the event description and event poster in the app&lt;/p&gt;
&lt;p&gt;US 02.01.02 As an organizer I want to store the generated QR code in my database&lt;/p&gt;
&lt;p&gt;US 02.01.03 As an organizer, I want to create and manage my facility profile.&lt;/p&gt;
&lt;p&gt;US 02.02.01 As an organizer I want to view the list of entrants who joined my event waiting list&lt;/p&gt;
&lt;p&gt;US 02.02.02 As an organizer I want to see on a map where entrants joined my event waiting list from.&lt;/p&gt;
&lt;p&gt;US 02.02.03 As an organizer I want to enable or disable the geolocation requirement for my event.&lt;/p&gt;
&lt;p&gt;US 02.03.01 As an organizer I want to OPTIONALLY limit the number of entrants who can join my waiting list&lt;/p&gt;
&lt;p&gt;US 02.04.01 As an organizer I want to upload an event poster to provide visual information to entrants &lt;/p&gt;
&lt;p&gt;US 02.04.02 As an organizer I want to update an event poster to provide visual information to entrants &lt;/p&gt;
&lt;p&gt;US 02.05.01 As an organizer I want to send a notification to chosen entrants to sign up for events.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This is the notification that they "won" the lottery.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;US 02.05.02 As an organizer I want to set the system to sample a specified number of attendees to register for the event&lt;/p&gt;
&lt;p&gt;US 02.05.03 As an organizer I want to be able to draw a replacement applicant from the pooling system when a previously selected applicant cancels or rejects the invitation&lt;/p&gt;
&lt;p&gt;US 02.06.01 As an organizer I want to view a list of all chosen entrants who are invited to apply&lt;/p&gt;
&lt;p&gt;US 02.06.02 As an organizer I want to see a list of all the cancelled entrants&lt;/p&gt;
&lt;p&gt;US 02.06.03 As an organizer I want to see a final list of entrants who enrolled for the event&lt;/p&gt;
&lt;p&gt;US 02.06.04 As an organizer I want to cancel entrants that did not sign up for the event &lt;/p&gt;
&lt;p&gt;US 02.07.01 As an organizer I want to send notifications to all entrants on the waiting list&lt;/p&gt;
&lt;p&gt;US 02.07.02 As an organizer I want to send notifications to all selected entrants&lt;/p&gt;
&lt;p&gt;US 02.07.03 As an organizer I want to send a notification to all cancelled entrants&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Admin:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;US 03.01.01 As an administrator, I want to be able to remove events.&lt;/p&gt;
&lt;p&gt;US 03.02.01 As an administrator, I want to be able to remove profiles.&lt;/p&gt;
&lt;p&gt;US 03.03.01 As an administrator, I want to be able to remove images.&lt;/p&gt;
&lt;p&gt;US 03.03.02 As an administrator, I want to be able to remove hashed QR code data&lt;/p&gt;
&lt;p&gt;US 03.04.01 As an administrator, I want to be able to browse events.&lt;/p&gt;
&lt;p&gt;US 03.05.01 As an administrator, I want to be able to browse profiles.&lt;/p&gt;
&lt;p&gt;US 03.06.01 As an administrator, I want to be able to browse images.&lt;/p&gt;
&lt;p&gt;US 03.07.01 As an administrator I want to remove facilities that violate app policy&lt;/p&gt;</content><category term="archive"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>Project Teams</title><link href="https://lums-cs360-web.github.io/lums-cs360/projects/project_team.html" rel="alternate"/><published>2024-08-26T00:00:00+05:00</published><updated>2024-08-26T00:00:00+05:00</updated><author><name>LUMS</name></author><id>tag:lums-cs360-web.github.io,2024-08-26:/lums-cs360/projects/project_team.html</id><summary type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019.
status: published
summary: Project Teams
[TOC]&lt;/p&gt;
&lt;h3 id="project-teams"&gt;Project Teams&lt;/h3&gt;</content><category term="projects"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>Project Problem Description</title><link href="https://lums-cs360-web.github.io/lums-cs360/archive/project_problem_descr_W2024.html" rel="alternate"/><published>2024-08-26T00:00:00+05:00</published><updated>2024-08-26T00:00:00+05:00</updated><author><name>Dr Abdul Ali Bangash</name></author><id>tag:lums-cs360-web.github.io,2024-08-26:/lums-cs360/archive/project_problem_descr_W2024.html</id><summary type="html">&lt;p&gt;Project Problem Description&lt;/p&gt;</summary><content type="html">&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#project-problem-description"&gt;Project Problem Description&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#event-lottery-system-application"&gt;Event Lottery System Application&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#description"&gt;Description:&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#features"&gt;Features:&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h3 id="project-problem-description"&gt;Project Problem Description&lt;/h3&gt;
&lt;p&gt;Warning: This is subject to change!&lt;/p&gt;
&lt;h4 id="event-lottery-system-application"&gt;&lt;strong&gt;Event Lottery System Application&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;You are to design and implement a simple, attractive, and easy-to-use Android application to satisfy the following goals. Your design must be flexible enough to allow developers to extend or migrate it.&lt;/p&gt;
&lt;h4 id="description"&gt;&lt;strong&gt;Description:&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;We want a mobile application where people can sign up for events at community centres that are popular and fill up fast. We want to allow people with limitations such as work, disability, etc. to be able to sign up for these events fairly and not have to sit refreshing a webpage until they can get a chance at reserving a spot.&lt;/p&gt;
&lt;p&gt;How? Lottery! If I am running swimming lessons for 20 kids, I will post my event or series of events and I will let everyone join the waiting list for a period of a week. After the week is up, I will ask the system to choose 20 kids to sign up. The system will then notify these kids (or their guardians), if they say no they don’t want swimming lessons, then the system will sample another child to sign up. I can monitor the progress and then get access to the final list of everyone who signs up. If perhaps someone cancels later I can cancel them in the app and a new applicant is drawn.&lt;/p&gt;
&lt;p&gt;Lottery systems are great because you don’t have to first get a chance to go to an event, you just have to say you are interested and if you’re lucky you will be offered a chance. This gives people who need the time, the time to sign up properly without a time pressure. Accessibility!&lt;/p&gt;
&lt;h4 id="features"&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Pooling System:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Organizers can draw from a waiting list of interested event attendees as selected participants.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;QR Code Scanning:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;entrants can scan QR promotional code to view details about the event and also join the waiting list&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Firebase Integration:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Utilize Firebase for storing event details, attendee lists, and real-time check-in status updates.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Multi-User Interaction:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Distinguish between entrants, organizers, and admin with special roles and privileges granted to each actor.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Image Upload:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Allow event organizers upload event poster image&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Geolocation Verification (Optional)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Optionally use geolocation to verify where users are joining the waiting list from. This is the location provided by the device.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Scenario:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;I want to sign my partner up to swim lessons, they need to learn how to swim if they are going to go canoeing with me. I go to the local rec centre, I see they have listed swimming lessons for beginners, I scan the QR code. I see that it is open to register for 2 more days. I click register. 2 days later when it is closed the system samples people, but not me. It notifies me that I wasn’t sampled in the first draw, but there might be a chance if someone declines. Nobody declines. Boo.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I am running an interpretive dance class where I teach the safety basics of dance (no eye gouging, that kind of stuff). I tell the app that I have classes every monday From 2025-01-01 to 2025-03-01, and that you need to register by 2024-12-15 and registration opens on 2024-12-01. The price is $60 and I can accommodate 60 people. I click publish and now an event is made where people can join the waiting list and they get this basic information. Also a QR code is generated that will lead them to this page.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I want to sign my partner up to piano lessons, they need to learn how to play if they are going to play piano with me. I go to the app, I go to my local rec centre, I see they have listed piano lessons for beginners, I scan the QR code. I see that it is open to register for 2 more days. I click register. 2 days later when it is closed the system samples people, but not me. It notifies me that I was sample.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Actors:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Entrant: a person who signs up for an event&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Organizer: the entity that runs the event&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Administrator: The entity that administers and runs the infrastructure&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Glossary:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;QR Code: a scannable code, either a barcode, a QR code, or other code scannable by Zebra crossing libraries or google QR code scanning libraries.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Entrant: someone who declares their interest in signing up for an event by joining the waiting list&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Waiting List: a record of entrants that showed interest in a specific event&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sign Up : An action of registering/confirming for an event when successfully selected&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can think of this like accepting an invitation.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Profile : A screen on the application that holds information about an entrant&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Choosing: Randomly selecting a number of entrants in the waiting list to be invited to sign up&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;User Stories:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;User needs are expressed in the form of partial user stories:&lt;/p&gt;
&lt;p&gt;As a (role), I want (goal).&lt;/p&gt;
&lt;p&gt;These descriptions may change to correct omissions and clarify noticed issues. New requirements will be introduced for the final project part.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;User:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;US 01.01.01 As an entrant, I want to join the waiting list for a specific event&lt;/p&gt;
&lt;p&gt;US 01.01.02 As an entrant, I want to leave the waiting list for a specific event &lt;/p&gt;
&lt;p&gt;US 01.02.01 As an entrant, I want to provide my personal information such as name, email and optional phone number in the app&lt;/p&gt;
&lt;p&gt;US 01.02.02 As an entrant I want to update information such as name, email and contact information on my profile&lt;/p&gt;
&lt;p&gt;US 01.03.01 As an entrant I want to upload a profile picture for a more personalized experience&lt;/p&gt;
&lt;p&gt;US 01.03.02 As an entrant I want remove profile picture if need be&lt;/p&gt;
&lt;p&gt;US 01.03.03 As an entrant I want my profile picture to be deterministically generated from my profile name if I haven't uploaded a profile image yet.&lt;/p&gt;
&lt;p&gt;US 01.04.01 As an entrant I want to receive notification when chosen from the waiting list (when I "win" the lottery)&lt;/p&gt;
&lt;p&gt;US 01.04.02 As an entrant I want to receive notification of not chosen on the app (when I "lose" the lottery)&lt;/p&gt;
&lt;p&gt;US 01.04.03 As an entrant I want to opt out of receiving notifications from organizers and admin&lt;/p&gt;
&lt;p&gt;US 01.05.01 As an entrant I want another chance to be chosen from the waiting list if a selected user declines an invitation to sign up&lt;/p&gt;
&lt;p&gt;US 01.05.02 As an entrant I want to be able to accept the invitation to register/sign up when chosen to participate in an event&lt;/p&gt;
&lt;p&gt;US 01.05.03 As an entrant I want to be able to decline an invitation when chosen to participate in an event&lt;/p&gt;
&lt;p&gt;US 01.06.01 As an entrant I want to view event details within the app by scanning the promotional QR code&lt;/p&gt;
&lt;p&gt;US 01.06.02 As an entrant I want to be able to be sign up for an event by scanning the QR code&lt;/p&gt;
&lt;p&gt;US 01.07.01 As an entrant, I want to be identified by my device, so that I don't have to use a username and password&lt;/p&gt;
&lt;p&gt;US 01.08.01 As an entrant, I want to be warned before joining a waiting list that requires geolocation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Organizer:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;US 02.01.01 As an organizer I want to create a new event and generate a unique promotional QR code that links to the event description and event poster in the app&lt;/p&gt;
&lt;p&gt;US 02.01.02 As an organizer I want to store the generated QR code in my database&lt;/p&gt;
&lt;p&gt;US 02.01.03 As an organizer, I want to create and manage my facility profile.&lt;/p&gt;
&lt;p&gt;US 02.02.01 As an organizer I want to view the list of entrants who joined my event waiting list&lt;/p&gt;
&lt;p&gt;US 02.02.02 As an organizer I want to see on a map where entrants joined my event waiting list from.&lt;/p&gt;
&lt;p&gt;US 02.02.03 As an organizer I want to enable or disable the geolocation requirement for my event.&lt;/p&gt;
&lt;p&gt;US 02.03.01 As an organizer I want to OPTIONALLY limit the number of entrants who can join my waiting list&lt;/p&gt;
&lt;p&gt;US 02.04.01 As an organizer I want to upload an event poster to provide visual information to entrants &lt;/p&gt;
&lt;p&gt;US 02.04.02 As an organizer I want to update an event poster to provide visual information to entrants &lt;/p&gt;
&lt;p&gt;US 02.05.01 As an organizer I want to send a notification to chosen entrants to sign up for events.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This is the notification that they "won" the lottery.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;US 02.05.02 As an organizer I want to set the system to sample a specified number of attendees to register for the event&lt;/p&gt;
&lt;p&gt;US 02.05.03 As an organizer I want to be able to draw a replacement applicant from the pooling system when a previously selected applicant cancels or rejects the invitation&lt;/p&gt;
&lt;p&gt;US 02.06.01 As an organizer I want to view a list of all chosen entrants who are invited to apply&lt;/p&gt;
&lt;p&gt;US 02.06.02 As an organizer I want to see a list of all the cancelled entrants&lt;/p&gt;
&lt;p&gt;US 02.06.03 As an organizer I want to see a final list of entrants who enrolled for the event&lt;/p&gt;
&lt;p&gt;US 02.06.04 As an organizer I want to cancel entrants that did not sign up for the event &lt;/p&gt;
&lt;p&gt;US 02.07.01 As an organizer I want to send notifications to all entrants on the waiting list&lt;/p&gt;
&lt;p&gt;US 02.07.02 As an organizer I want to send notifications to all selected entrants&lt;/p&gt;
&lt;p&gt;US 02.07.03 As an organizer I want to send a notification to all cancelled entrants&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Admin:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;US 03.01.01 As an administrator, I want to be able to remove events.&lt;/p&gt;
&lt;p&gt;US 03.02.01 As an administrator, I want to be able to remove profiles.&lt;/p&gt;
&lt;p&gt;US 03.03.01 As an administrator, I want to be able to remove images.&lt;/p&gt;
&lt;p&gt;US 03.03.02 As an administrator, I want to be able to remove hashed QR code data&lt;/p&gt;
&lt;p&gt;US 03.04.01 As an administrator, I want to be able to browse events.&lt;/p&gt;
&lt;p&gt;US 03.05.01 As an administrator, I want to be able to browse profiles.&lt;/p&gt;
&lt;p&gt;US 03.06.01 As an administrator, I want to be able to browse images.&lt;/p&gt;
&lt;p&gt;US 03.07.01 As an administrator I want to remove facilities that violate app policy&lt;/p&gt;</content><category term="archive"/><category term="projects"/><category term="teams"/><category term="grading"/></entry><entry><title>Lab 1</title><link href="https://lums-cs360-web.github.io/lums-cs360/labs/lab1.html" rel="alternate"/><published>2024-08-19T00:00:00+05:00</published><updated>2024-08-19T00:00:00+05:00</updated><author><name>LUMS</name></author><id>tag:lums-cs360-web.github.io,2024-08-19:/lums-cs360/labs/lab1.html</id><summary type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019.
status: published
summary: Lab 1 -- Java, OOP, Android Studio&lt;/p&gt;
&lt;hr&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#lab-1-slides"&gt;Lab 1 Slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#instructions"&gt;Instructions&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#walkthrough"&gt;Walkthrough&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#lab1-participation-exercise-requirements"&gt;Lab1 Participation Exercise Requirements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#submission"&gt;Submission&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h3 id="lab-1-slides"&gt;Lab 1 Slides&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://lums-cs360-web.github.io/lums-cs360/labs/slides/Lab1.pdf"&gt;Lab 1 Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="instructions"&gt;Instructions&lt;/h3&gt;
&lt;p&gt;Download and install Android Studio from the official Android website&lt;/p&gt;
&lt;p&gt;&lt;a href="https://developer.android.com/studio"&gt;https://developer.android.com/studio&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Check for specific installation guide unique to your Operating System&lt;/p&gt;
&lt;p&gt;&lt;a href="https://developer.android.com/studio/install"&gt;https://developer.android.com/studio/install&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="walkthrough"&gt;Walkthrough&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a new LonelyTwitter project (File &amp;gt; New &amp;gt; New Project &amp;gt; Select "Empty Views Activity"). Make sure that the project language is &lt;strong&gt;Java&lt;/strong&gt;, not Kotlin!&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create Tweet Class (Click &amp;gt; New &amp;gt; Java Class)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Make attributes (Date date &amp;amp; String message) (use alt+enter (windows) or Option-Enter (Mac) to include/import any packages)&lt;ul&gt;
&lt;li&gt;Note: Access modifiers&lt;ul&gt;
&lt;li&gt;private= class only&lt;/li&gt;
&lt;li&gt;No modifier = within package&lt;/li&gt;
&lt;li&gt;protected = within package and through inheritance&lt;/li&gt;
&lt;li&gt;public = everyone!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Create two Constructors (one with the only Message and the other with Date+Message as arguments) and use Date = new Date() (current date and time) for the first constructor (the Default value for date).&lt;/li&gt;
&lt;li&gt;Note: Java Object Class (everything extends it, calls its constructor and it has built-in methods like toString())&lt;/li&gt;
&lt;li&gt;Note: the this keyword (message = message doesn't do anything!)&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Make a regular tweet in MainActivity (pass in an empty string)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Getters and setters&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Inheritance&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Make ImportantTweet child class (extends Tweet)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;call super in both of ImportantTweet's constructors&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Now have access to the parent's methods and attributes. except constructors! (try and make an important Tweet)&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;ImportantTweet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kd"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Super calls the parent's constructor (there is a hidden call to Object's constructor)&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Change the Tweet to an ImportantTweet in MainActivity&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Abstract Stuff&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Make Tweet Class Abstract&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;public abstract class Tweet { ... }&lt;ul&gt;
&lt;li&gt;Note: Abstract classes cannot be instantiated.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;public abstract Boolean isImportant();&lt;ul&gt;
&lt;li&gt;This is an abstract method, it has no implementation and must be overridden by child classes (to add functionality).&lt;/li&gt;
&lt;li&gt;Note: Abstract methods cannot be called using any objects.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;What if they need to behave differently? @Override isImportant() to create a compile-time check&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You need to override the method in the child class as it is an abstract method in the parent class that has no implementation.&lt;/li&gt;
&lt;li&gt;Overriding the method allows the child class to have its own implementation of the method.&lt;ul&gt;
&lt;li&gt;ex. the Normal Tweet is not important, so it returns false. The ImportantTweet is important, so it returns true.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The methods in the child classes need to be overridden to behave differently.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Make a NormalTweet class, could have many types of tweets&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;call super in both of  NormalTweet's constructors&lt;/li&gt;
&lt;li&gt;isImportant method should return Boolean.FALSE&lt;/li&gt;
&lt;li&gt;What if we want to use both in our list? (Implicit upcasting)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ArrayList&lt;Tweet&gt; tweetList = new ArrayList&lt;Tweet&gt;();
tweetList.add(normalTweet);&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Abstract method and base class so all the classes have the isImportant() method&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;An interface can also be used to force the use of some methods&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;Tweetable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getMessage&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Date&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getDate&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Make Tweet implement Tweetable&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="lab1-participation-exercise-requirements"&gt;Lab1 Participation Exercise Requirements&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Add three new model classes to LonelyTwitter: the first should be an abstract base class which represents the current mood. The second and third should be non-abstract classes which represent different moods (Ex: happy, sad, etc.) and inherit from the abstract class.&lt;/li&gt;
&lt;li&gt;Each mood should have a date and getters and setters to access the date.&lt;/li&gt;
&lt;li&gt;A constructor which sets the date to a default and a constructor which takes a date as an argument should be provided. &lt;/li&gt;
&lt;li&gt;Encapsulation should be followed.&lt;/li&gt;
&lt;li&gt;Each mood should have a method which returns a string representing that mood.&lt;/li&gt;
&lt;li&gt;Your new code should have examples of classes, methods, attributes, access modifiers, encapsulation, constructors, inheritance and abstract base classes.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="submission"&gt;Submission&lt;/h3&gt;
&lt;p&gt;LMS&lt;/p&gt;
&lt;p&gt;Note: Running the project is not necessary.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Due date:&lt;/strong&gt; Check the &lt;a href="https://lums-cs360-web.github.io/lums-cs360/#schedule"&gt;schedule&lt;/a&gt;. (Usually Tuesday 5PM)&lt;/li&gt;
&lt;/ul&gt;</content><category term="labs"/><category term="labs"/><category term="policy"/><category term="grading"/></entry><entry><title>Assignment 0: Getting Started</title><link href="https://lums-cs360-web.github.io/lums-cs360/individual/assignment0.html" rel="alternate"/><published>2024-08-12T00:00:00+05:00</published><updated>2024-08-12T00:00:00+05:00</updated><author><name>LUMS</name></author><id>tag:lums-cs360-web.github.io,2024-08-12:/lums-cs360/individual/assignment0.html</id><summary type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019 …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Dr. Suleman Shahid and Dr. Abdul Ali Bangash, Department of Computing Science, LUMS (2026).
Dr. Hazel Campbell, Department of Computing Science, University of Alberta (2019, 2023, 2024).
Dr. Abram Hindle, Department of Computing Science, University of Alberta (2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023).
Alexander Wong, 2019.
status: published
summary: Assignment 0: Getting Started&lt;/p&gt;
&lt;hr&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#learning-objectives"&gt;Learning Objectives&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#problem-description"&gt;Problem Description&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#submission-procedure"&gt;Submission Procedure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#hints"&gt;Hints&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Due date:&lt;/strong&gt; Check the &lt;a href="https://lums-cs360-web.github.io/lums-cs360/#schedule"&gt;schedule&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="learning-objectives"&gt;Learning Objectives&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Learn how to use Android Studio on your computer.&lt;/li&gt;
&lt;li&gt;Learn to create, build, and run a simple Android app.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="problem-description"&gt;Problem Description&lt;/h3&gt;
&lt;p&gt;Install Android Studio on your own computer.&lt;/p&gt;
&lt;p&gt;Make and run a simple hello world app according to the Build your first app in this &lt;a href="https://lums-cs360-web.github.io/lums-cs360/individual/Build_Your_First_Android_App_in_Java.pdf"&gt;tutorial&lt;/a&gt;.Ensure you do all of this tutorial, including the final section on Fragments.&lt;/p&gt;
&lt;p&gt;In Section 6 step 10 where it says change the text of the TextView to 0, type in your student number instead. So the count button will increment your student number. Do not prefix your student number with zeros.
Deliverables
Screenshots:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nv"&gt;First&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;screenshot&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Take&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;first&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;screenshot&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;running&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;before&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;you&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;press&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;button&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;it&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;should&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;show&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;student&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;number&lt;/span&gt;.

&lt;span class="nv"&gt;Second&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;screenshot&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Take&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;second&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;screenshot&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;running&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;showing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;activity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;after&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;you&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;tap&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;times&lt;/span&gt;.&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;The&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;should&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;be&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;student&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;number&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;

&lt;span class="nv"&gt;Each&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;screenshot&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;should&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;show&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;development&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;environment&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;just&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;device&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;display&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;user&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;interface&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;running&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;app&lt;/span&gt;.&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Capturing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;frame&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;emulator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;window&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;fine&lt;/span&gt;.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3 id="submission-procedure"&gt;Submission Procedure&lt;/h3&gt;
&lt;p&gt;Use a non-lossy image format for the screenshots (like PNG with usually lossless settings, and not JPEG with usually lossy settings).&lt;/p&gt;
&lt;p&gt;Do not use a phone camera to take the images.&lt;/p&gt;
&lt;p&gt;Name the two screenshot files with your RollNum (e.g., 25100052-1.png, 25100052-2.png). Zip the files (e.g., 25100052.zip) and upload the archive using LMS.&lt;/p&gt;
&lt;p&gt;The maximum upload size is 5 MB.&lt;/p&gt;
&lt;p&gt;Proper completion of this assignment is considered as part of course participation.&lt;/p&gt;
&lt;p&gt;Upload your zip file to LMS under "Assignment 0".&lt;/p&gt;
&lt;h3 id="hints"&gt;Hints&lt;/h3&gt;
&lt;p&gt;IF you have build.gradle.ktx files, for the last step instead of&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;def nav_version = &amp;quot;2.3.0-alpha04&amp;quot;
classpath &amp;quot;androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;in your &lt;code&gt;build.gradle.ktx&lt;/code&gt; (Project: My Frist App), You need&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;buildscript {
    repositories {
        google()
    }
    dependencies {
        val nav_version = &amp;quot;2.7.6&amp;quot;
        classpath(&amp;quot;androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version&amp;quot;)
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;And instead of:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;apply plugin: &amp;#39;androidx.navigation.safeargs&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;You need in your build.gradle.ktx (module: app):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;plugins {
    id(&amp;quot;androidx.navigation.safeargs&amp;quot;)
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;There is also an error step 8 of task 9 that if you get an error about an unresolved inport&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="s2"&gt;&amp;quot;import androidx.navigation.fragment.navArgs&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;but you can just remove that import its not needed for Java code.&lt;/p&gt;</content><category term="individual"/><category term="individual"/><category term="policy"/><category term="grading"/></entry></feed>