When you enroll in this course, you'll also be enrolled in this Specialization.
Learn new concepts from industry experts
Gain a foundational understanding of a subject or tool
Develop job-relevant skills with hands-on projects
Earn a shareable career certificate
There are 4 modules in this course
This course takes Java beginners to the next level by covering object-oriented analysis and design. You will discover how to create modular, flexible, and reusable software, by applying object-oriented design principles and guidelines. And, you will be able to communicate these designs in a visual notation known as Unified Modelling Language (UML).
You will be challenged in the Capstone Project to apply your knowledge of object-oriented design by evolving and documenting the Java codebase for an Android application with corresponding UML documentation.
After completing this course, you will be able to:
• Apply the Class Responsibility Collaborator (CRC) technique to analyze and design the object-oriented model for a problem.
• Explain and apply object-oriented modeling principles and their purpose (e.g., abstraction, encapsulation, decomposition, generalization).
• Explain and apply different types of inheritance
• Explain the difference between association, aggregation, and composition dependencies.
• Express object-oriented models as Unified Modeling Language (UML) class diagrams.
• Translate between UML class diagrams and equivalent Java code.
• Apply design guidelines for modularity, separation of concerns, information hiding, and conceptual integrity to create a flexible, reusable, maintainable design.
• Explain the tradeoff between cohesion and coupling.
Good software design begins before coding. After establishing the initial software requirements, design practices involve two main activities: conceptual design and technical design. In this module, you will realize the importance of design and object-oriented thinking, and learn how to design software using techniques like CRC cards.
What's included
6 videos9 readings4 assignments
Show info about module content
6 videos•Total 59 minutes
1.1.1 – Welcome to Software Design and Architecture•9 minutes
1.1.2 – Software Architect and Design Roles in Industry•20 minutes
1.1.3 – Object-Oriented Modeling•3 minutes
1.1.4 – Software Requirements, Conceptual and Technical Designs•10 minutes
1.1.5 – Competing Qualities and Trade-offs•9 minutes
1.1.6 – Record, Organize, and Refine Components•7 minutes
9 readings•Total 90 minutes
Meet Your Presenter – Sam Jeffery•10 minutes
Meet Your Facilitators•10 minutes
Java Knowledge•10 minutes
Object Oriented Design Course Notes•10 minutes
Course Glossary•10 minutes
Discussion: Introduce Yourself•10 minutes
Expressing Requirements with User Stories•10 minutes
Categories of Objects in Design•10 minutes
Discussion: Modeling CRC•10 minutes
4 assignments•Total 120 minutes
Module 1 Review•30 minutes
Java Proficiency Quiz 1•30 minutes
Java Proficiency Quiz 2•30 minutes
Java Proficiency Quiz 3•30 minutes
Object-Oriented Modeling
Module 2•4 hours to complete
Module details
Best software design practices have evolved alongside programming languages. Today, all developers should be familiar with abstraction, encapsulation, decomposition, and generalization, which are fundamental principles in object-oriented design. You will learn all of these principles and how they are expressed in Java and communicated visually in Unified Modelling Language.
What's included
11 videos4 readings1 assignment2 peer reviews
Show info about module content
11 videos•Total 70 minutes
1.2.1 – Models: Bridging Concepts and Solutions•4 minutes
1.2.2 – Languages Evolution•7 minutes
1.2.3 – Abstraction•6 minutes
1.2.4 – Encapsulation•6 minutes
1.2.5 – Decomposition•5 minutes
1.2.6 – Generalization•5 minutes
1.2.7 – Abstraction in Java and UML•7 minutes
1.2.8 – Encapsulation in Java and UML•5 minutes
1.2.9 – Decomposition in Java and UML•8 minutes
1.2.10 – Generalization with Inheritance in Java and UML•7 minutes
1.2.11 – Generalization with Interfaces in Java and UML•9 minutes
4 readings•Total 30 minutes
Discussion: Design Principles and Language Evolution•10 minutes
Ungraded Assignment - UML Class Diagram (Solution)•10 minutes
Peer Review Request Forum•0 minutes
Capstone Assignment 1.1 - UML Class Diagram (Solution)•10 minutes
1 assignment•Total 30 minutes
Module 2 Review•30 minutes
2 peer reviews•Total 120 minutes
Capstone Assignment 1.1 – UML Class Diagram•60 minutes
Ungraded Assignment - UML Class Diagram•60 minutes
Design Principles
Module 3•7 hours to complete
Module details
Additional design principles will help you to create code that is flexible, reusable, and maintainable. In this module you will learn about coupling and cohesion, separation of concerns, information hiding, and conceptual integrity. You will also learn to avoid common pitfalls with inheritance, and ways to express software behavior in UML.
Ungraded Assignment – UML State Diagram•60 minutes
Capstone Challenge
Module 4•2 hours to complete
Module details
In the previous modules you were introduced to object-oriented analysis and design, object-oriented modeling, and design principles. To cement your understanding of this material, you created a UML class diagram from an example Android code base, and used your understanding of the code base to make sequence and state diagrams to model its behavior. Now, in the final module of the course, given a description of new functionality and an updated UML class diagram, you will implement the updated design into the Android code base. After completing this development task, you will be ready to complete the final exam.
What's included
4 readings1 assignment1 peer review
Show info about module content
4 readings•Total 40 minutes
Capstone Assignment 1.4 - Update the Application (Solution)•10 minutes
Discussion: Last Word – Object-Oriented Design•10 minutes
Acknowledgements•10 minutes
Credits•10 minutes
1 assignment•Total 30 minutes
Final Exam•30 minutes
1 peer review•Total 60 minutes
Capstone Assignment 1.4 – Update the Application•60 minutes
Earn a career certificate
Add this credential to your LinkedIn profile, resume, or CV. Share it on social media and in your performance review.
Instructor
Instructor ratings
Instructor ratings
We asked all learners to give feedback on our instructors based on the quality of their teaching style.
The University of Alberta is considered among the world’s leading public research- and teaching-intensive universities, known for excellence across the humanities, sciences, creative arts, business, engineering and health sciences.
As one of Canada’s top universities, we are investing in purpose-built online post-secondary education—rooted in innovative digital pedagogies, world-class faculty, exceptional design, and a championed student experience.
"To be able to take courses at my own pace and rhythm has been an amazing experience. I can learn whenever it fits my schedule and mood."
Jennifer J.
Learner since 2020
"I directly applied the concepts and skills I learned from my courses to an exciting new project at work."
Larry W.
Learner since 2021
"When I need courses on topics that my university doesn't offer, Coursera is one of the best places to go."
Chaitanya A.
"Learning isn't just about being better at your job: it's so much more than that. Coursera allows me to learn without limits."
Learner reviews
4.7
2,413 reviews
5 stars
75.90%
4 stars
18.42%
3 stars
3.51%
2 stars
0.74%
1 star
1.40%
Showing 3 of 2413
G
GJ
5·
Reviewed on Sep 25, 2022
I learnt OOD concepts like never before and feel empowered to work on software in a more effective way than before.Thank you, Coursera and University of Alberta! :)
Y
YF
5·
Reviewed on Apr 20, 2022
course introduce prefect content for beignner with good tasks that give you feedback about your progress at last thanks for all who helped me to finish this course
L
LL
5·
Reviewed on Jul 26, 2020
This course is brilliant! Through this course, I gradually lay solid foundation in Object-Oriented Design, as well as improve my programming skills. I'd like to recommend it to my peers!
What will I actually learn in this object-oriented design course?
You'll learn how to think through software design before coding and how to express that design clearly in UML and Java. It starts with object-oriented analysis and modeling, then builds into principles that help you create software that's modular, reusable, and easier to maintain. In the capstone, you'll apply that thinking to an Android app codebase by creating diagrams and updating code.
Do I need to know Java before taking this course?
Yes, some Java background is expected. The course includes refresher quizzes, but it quickly moves into class design, inheritance, UML-to-Java translation, and work with a Java Android codebase. You don't need prior UML experience, but basic programming in Java will make the course much easier to follow.
Is this course beginner-friendly for object-oriented design?
It can be beginner-friendly for object-oriented design if you already know basic Java. The course doesn't assume much prior design experience, and it starts with problem breakdown and modeling before moving into UML and design principles. If you're new to programming or still shaky on Java classes and syntax, the pace will likely feel more demanding.
How long does it take to complete this course?
Expect about 17 hours of work in total. At a pace of around 10 hours a week, many learners could finish in about 2 weeks, with time spread across lessons, readings, quizzes, and peer-reviewed assignments. The course includes lessons, quizzes, UML assignments, and a final capstone update to a Java app.
Are there hands-on exercises or projects in this course?
Yes, there's meaningful hands-on work, though it's more design-focused than lab-heavy. You'll create UML class, sequence, and state diagrams from an Android codebase, then use an updated class diagram to modify the Java application itself. The work is fairly guided at first and becomes more open in the capstone, so you apply each idea as you learn it.
What skills and topics are covered in this course?
It covers object-oriented modeling, design quality, and the use of UML to communicate software structure and behavior. You'll use CRC cards to identify classes and responsibilities, then learn how inheritance and class relationships show up in UML and Java. Overall, the course is about designing software that's easier to extend, reuse, and maintain.
What can I actually do after finishing this course?
After finishing, you should be able to turn a software problem into an object-oriented design, document it in UML, and relate that design to Java code. For example, you could examine an existing codebase and produce a class diagram or sequence diagram that explains its structure and interactions. You should also be better able to judge design choices around modularity, inheritance, and coupling.
Is this course more focused on theory or hands-on learning?
It's more concept-first than project-heavy, with guided practice throughout. The course spends a lot of time on modeling, design principles, and UML, then reinforces those ideas through assignments and a capstone update to a Java app.
Why would I choose this course over other object-oriented design courses?
Choose this course if you want object-oriented design taught as a bridge between early analysis, visual modeling, and actual Java implementation. Instead of stopping at broad principles, it asks you to work through UML class, sequence, and state diagrams and then use those designs to update an Android codebase. It's a strong fit for learners who already know some Java and want a more disciplined way to design software before they code.