Tuesday, July 21, 2015

thought-works: Object oriented design for a digital watch:



thought-works: Object oriented design for a digital watch:

A simplistic digital displays Hours of the day, minutes of the hour and the seconds of the minute. If you noticed a digital watch the seconds counts refreshes say twice a second and the keeps updating. When the seconds count is 60 seconds hand is reset and the minute count is incremented. Once the minute hand reaches a count 60 the minutes hand is reset and hours hand is incremented. Once the hours count reaches 24 the hours hand is reset to 0.


From the above description, the components of the system are:
1) WatchController
2) SecondsCounter,MinutesCounter,HoursCounter

Below is the class diagram representation:



We have an abstract Type TemporalCounter which defines the method getCounter() returns the current value of the counter which is common for all the counters.

The remaining methods of the class TemporalCounter are abstract and each sub class should define the behavior/declare itself as an abstract class. The reason they are abstract is each subtype has its own different version of increment. For e.g while incrementing seconds counter, once we reach 60 we have to reset the counter and call minutes hand to increment. Same applies for minutes hand increment except that once it reaches 60 it call hours hand increment.

The main controller class supports methods to start and stop the digital watch. Once started, displayTime is executed by the controller. The sub routine for displayTime should be like this

           public void displayTime() {

               while(!stop){
                    secsHand.increment();
                    hoursHand,display()+":"+minsHand.display()+":"+secsHand.display();
               }
            }


Read full article from thought-works: Object oriented design for a digital watch:

Labels

Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts