Course UpdatesSep 5: Adding ArrayList lecture (Section II) and one programming assignment on files and ArrayListOverviewThe course provides a comprehensive coverage of object-oriented programming (OOP) concepts using Java programming language.OOP is the key paradigm that allows software reuseand thatfacilitates the development of complex and large-scale software. The course first starts with providing a clear understanding why OOP is important. We then dive into the main OOP concepts includingencapsulation, inheritance, and polymorphism. We also present generic classes and design patterns which further demonstrate an additional softwareabstraction. All along the course, we show how OOP allows software engineers to develop complex software by making high-level abstractions starting from very general classes down to more concrete classes.To better illustrate the concepts, each chapter contains several hands-on activities, namely: (1) Quizzes which help reviewing the main theoretical concepts presented in the lectures, (2) short coding exercises where the student can apply the concepts he learned on simple use cases, (3) programming assignments, whichprovide more thorough activities aiming at consolidating the understanding of the learner and guide him to master the concepts presented in the lectures. All hands-on activities have written and video solutions.In addition, during the course, the student will work on one application which he will improve from one chapter to another so that he can observe how programming concepts he learned can be applied to improve a certain application. In this course, we consider an application to process images for the programming assignment. There is no pre-requisite needed about images to do the exercises, as it is just a simple application context for the programming assignment.The course was designed to provide the learners with a solid background on software engineering using object-oriented programming concepts!Iwish youan excellent learning experience!