We may earn an affiliate commission when you visit our partners.
Zoran Horvat

In this course, you will learn the basic principles of object-oriented programming, and then learn how to apply those principles to construct an operational and correct code using the C# programming language and .NET. As the course progresses, you will learn such programming concepts as objects, method resolution, polymorphism, object composition, class inheritance, object substitution, etc., but also the basic principles of object-oriented design and even project management, such as abstraction, dependency injection, open-closed principle, tell don't ask principle, the principles of agile software development and many more.

Read more

In this course, you will learn the basic principles of object-oriented programming, and then learn how to apply those principles to construct an operational and correct code using the C# programming language and .NET. As the course progresses, you will learn such programming concepts as objects, method resolution, polymorphism, object composition, class inheritance, object substitution, etc., but also the basic principles of object-oriented design and even project management, such as abstraction, dependency injection, open-closed principle, tell don't ask principle, the principles of agile software development and many more.

After completing this course, you will be qualified to continue learning the principles of object-oriented design, and to start developing applications that will be modeling different business domains.

This course differs from other similar courses in that it first devises the C# programming language from scratch, and the .NET Runtime that makes the object-oriented code run. Only after completing this task shall we step on to using the programming concepts to implement customer's requirements in C#.

The reason for such an extreme experiment is to teach the programmers that any object-oriented language is only a tool, which relies on a small set of operations that are already implemented for us - such as silently passing the this reference or resolving function addresses from the object reference at run time. I find great danger in writing code without understanding what happens when a piece of object-oriented code is taken for execution.

Enroll now

Here's a deal for you

We found an offer that may be relevant to this course.
Save money when you learn. All coupon codes, vouchers, and discounts are applied automatically unless otherwise noted.

What's inside

Learning objectives

  • Understand why c# is organized the way it is
  • Learn how to step from procedural to proper object-oriented design
  • Construct larger classes out of smaller ones
  • Combine behavior to construct complex features

Syllabus

In which we are meeting a programming task for the first time, but we still have no access to a proper programming language such as C#, and we must invent programming constructs before applying them t
Read more

Puts C# programming language into perspective of major programming styles

Briefly lists the topics that will be covered in this course

Provides instructions how to choose and install an IDE that will be used throughout this course

Introduces variables and values to represent numbers, character strings and dates

Introduces arithmetic and other transforms that apply to variables and values

Summarizes this module

Displays the roles of procedures, as far as they are useful to build larger chunks of logic

Introduces objects, as the first programming form which brings data and procedures together

Introduces constructors and instances, for the first time creating what looks like an object

Substitutes classes for modules and introduces object-oriented lingo

Explains explicit and implicit memory deallocation

Explains importance of making every programming language deterministic

Explains basic building blocks of C# code

Introduces blocks of code and explains syntax of the if instruction and Boolean conditions

Explains how methods are defined on a C# class

Introduces access modifiers that apply to methods, fields and other class members

Explains the concept of program entry points in modern operating systems

Demonstrates how a new console application project can be created and run using Visual Studio

Contains autonomous exercise

Demonstrates limitation of a class which does not support varying implementation of a method

Introduces derived classes

Explains the role of virtual methods table in a class

Explains how vtable is used to specify method overrides

Introduces proper virtual functions in C#

Explains C# language syntax that allows declaring and overriding virtual function

Introduces method overloading syntax in C#

Explains the relationship between .NET projects and assemblies

Explains .NET solutions and the elements they contain

Analyzes customer's requirements which shall be implemented in subsequent demos

Explains how to add a new class to the project, driven by customer's requirements

Demonstrates how to initialize objects to valid state

Introduces common base class for all classes

Demonstrates how to override the ToString method inherited from System.Object

Explains decisions that lead to creation of new classes

Examines code which appears in multiple places and corrects the issue by introducing a new class for the duplicated code

Explains strategies useful when giving names to methods

Examines separation of concerns between domain classes and how it influences method implementation

Implements a domain-related method in full object-oriented style

Explains how an exception can be used as a placeholder for a method which is not implemented yet

Introduces method call chaining to simplify code

Introduces expression-bodied syntax for methods

Explains the "Tell, don't ask" principle and its relationship to encapsulation

Demonstrates problem decomposition through private methods defined on a class that uses them

Applies ternary operator as means of pattern matching

Continues development of the demo

Explains reasons and benefits of following the top-down development style

Showcases capabilities of currently developed code

Explains benefits we collect from having a detailed domain model

Demonstrates the working principle of combining smaller features into larger ones when implementing requirements

Explains polymorphic calls and methods implemented in derived classes

Analyzes requirements and prepares ground to implement some of them

Explains reasons that lead to introduction of the Open-closed Principle in object-oriented programming

Analyzes code and identifies methods that are misplaced, and which are candidates to migrate to new classes

Reiterates dynamic dispatch mechanism applied by the runtime

Introduces dependency injection technique

Applies dependency injection to the sample domain model

Demonstrates use of an injected dependency

Demonstrates practical method of deriving a class from an existing class

Introduces abstract methods and classes

Demonstrates application of the object substitution principle on class dependencies

Demonstrates modifying behavior of a class by selecting a concrete dependency object

Repeats principal methods of how to approach the problem of learning a new programming language

Repeats operational principles of classes and objects

Repeats backing principles of good object-oriented design

Repeats principles of method composition, and how it applies to object-oriented design

Repeats principles of dependency injection, and how it applies to object-oriented design

Explains major problems we face when designing solutions for the real world

Explains principles of code refactoring techniques and their role in redesigning object-oriented models

Traffic lights

Read about what's good
what should give you pause
and possible dealbreakers
Starts with the fundamentals of object-oriented programming and gradually introduces C# syntax, which is helpful for those new to both OOP and the language
Covers object-oriented design principles like abstraction, dependency injection, and the open-closed principle, which are essential for building maintainable software
Devises the C# programming language from scratch, offering a unique perspective on the language's design and underlying principles
Explores the .NET runtime and how object-oriented code is executed, providing a deeper understanding of the C# environment
Requires learners to choose and install an IDE, which may pose a challenge for absolute beginners who are unfamiliar with software development environments
Focuses on older concepts such as explicit and implicit memory deallocation, which are less relevant in modern C# development with garbage collection

Save this course

Create your own learning path. Save this course to your list so you can find it easily later.
Save

Reviews summary

Introductory c# oop with foundational depth

According to learners, this course provides a strong foundation in object-oriented programming concepts using C#. Students particularly appreciate the instructor's approach, which goes beyond just syntax to explain the underlying 'why' of OOP and runtime mechanics, a feature many found unique and highly valuable. The curriculum covers core OOP principles, design patterns like dependency injection and the Open-Closed Principle, and introduces practical application using Visual Studio. While some reviewers found the pace or initial abstract concepts challenging, especially without prior programming experience, the overall sentiment is positive, with many feeling well-equipped to pursue more advanced topics and apply learned concepts.
Builds programming concepts conceptually first.
"The unconventional start, inventing programming constructs before C#, was surprisingly effective for understanding the fundamentals."
"This unique pedagogical approach really sets it apart and helps you see the underlying logic before the language."
"I was skeptical about starting without a language, but it proved to be a brilliant way to teach the core ideas."
"Building concepts from scratch before C# syntax makes you appreciate the language features more."
Includes demos and Visual Studio use.
"The course includes practical demonstrations using Visual Studio, which helps reinforce the theory."
"I liked seeing how the concepts were applied step-by-step in the coding demos."
"The exercises and demos helped bridge the gap between theory and actual code."
"Using Visual Studio throughout the course was helpful for getting hands-on experience."
Instructor explains complex ideas effectively.
"The instructor explains complex topics with clarity and uses good examples."
"His explanations for why things work are fantastic and really help the concepts stick."
"I found the lectures engaging and the instructor's delivery made even difficult subjects understandable."
"The teacher has a unique perspective and articulates it very well."
Covers key principles and design patterns.
"The course does a great job explaining polymorphism, inheritance, encapsulation, and even dives into principles like Dependency Injection."
"I found the sections on object composition, inheritance, and especially the design principles very well explained and practical."
"Learning about the Open-Closed Principle and 'Tell Don't Ask' in an introductory course was a fantastic bonus."
"The course clearly lays out the principles of object-oriented design, which is essential for building robust applications."
Delves deep into core OOP concepts and runtime.
"This course is an exceptional deep dive into the *why* behind OOP in C#. It doesn't just show you syntax but explains how things work under the hood."
"Unlike many beginner courses, this one provides a really solid foundation by explaining fundamental concepts and their implementation details."
"I appreciate the unique approach of building up programming concepts before diving into C# syntax; it really solidified my understanding."
"The explanation of the runtime mechanics and how object-oriented code is executed was incredibly insightful."
May require some prior programming exposure.
"As a complete beginner, I found the initial abstract concepts a bit overwhelming and the pace sometimes felt too fast."
"This course is labeled 'Beginning', but I think having some prior programming background would make it much easier."
"While thorough, it might be a steep learning curve if you've never coded before or seen anything beyond simple scripts."
"The course dives into some deep technical details early on, which could be intimidating for someone with zero experience."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Beginning Object-oriented Programming with C# with these activities:
Review Procedural Programming Concepts
Solidify your understanding of procedural programming concepts as a foundation for grasping the shift to object-oriented programming.
Browse courses on Procedural Programming
Show steps
  • Review the definition of a procedure.
  • Practice writing simple procedural programs.
  • Identify the limitations of procedural programming.
Review 'Head First C#'
Reinforce your understanding of C# syntax and object-oriented principles with a beginner-friendly guide.
View Head First C# on Amazon
Show steps
  • Read the chapters on object-oriented programming.
  • Work through the code examples in the book.
  • Complete the exercises at the end of each chapter.
Implement Basic C# Classes
Practice implementing basic C# classes to solidify your understanding of object creation and method definition.
Show steps
  • Create a simple class with properties and methods.
  • Instantiate objects of the class and call methods.
  • Experiment with different access modifiers.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Develop a Simple Console Application
Apply your knowledge of object-oriented programming to build a console application that models a real-world scenario.
Show steps
  • Define the classes and objects needed for the application.
  • Implement the methods and properties of each class.
  • Test the application thoroughly.
Follow Advanced C# Tutorials
Explore advanced C# tutorials to deepen your understanding of object-oriented design patterns and best practices.
Show steps
  • Find tutorials on topics like dependency injection.
  • Implement the code examples in the tutorials.
  • Adapt the code to your own projects.
Review 'Design Patterns: Elements of Reusable Object-Oriented Software'
Learn about common design patterns to improve the structure and maintainability of your C# code.
View Design Patterns on Amazon
Show steps
  • Read the descriptions of the different design patterns.
  • Study the code examples for each pattern.
  • Identify opportunities to apply the patterns in your projects.
Help Others in Online Forums
Reinforce your understanding of C# and object-oriented programming by helping other students in online forums.
Show steps
  • Find online forums related to C# programming.
  • Answer questions from other students.
  • Explain concepts in your own words.

Career center

Learners who complete Beginning Object-oriented Programming with C# will develop knowledge and skills that may be useful to these careers:
Software Developer
A software developer designs, develops, and tests software applications. This course, which covers the basics of object-oriented programming using C#, helps build a foundation for creating robust and scalable applications. The course emphasizes understanding the underlying principles of object-oriented design and how C# implements these concepts. Learning about objects, polymorphism, and inheritance, as taught in this course, is critical for writing reusable, maintainable code. The focus on object-oriented design principles, such as abstraction and dependency injection, further prepares you to tackle complex software projects. Software developers interested in a deeper understanding of C# and object-oriented methodologies may find this course particularly helpful.
C# Developer
A C# Developer specializes in creating applications using the C# programming language. This course directly addresses the core skills needed for this role, by providing a deep dive into object-oriented programming with C#. The course teaches how the C# programming language and the .NET runtime operate. The course also discusses objects, method resolution, and class inheritance. This course further differentiates itself by creating the C# programming language from scratch, and the .NET Runtime. C# Developers who desire a comprehensive understanding of how C# works at a fundamental level will find this course invaluable.
Application Developer
An application developer focuses on designing and building software applications for various platforms. This course, which teaches C# programming and object-oriented principles, can help you in the development of efficient and well-structured applications. The course covers object-oriented concepts, such as polymorphism, object composition, and class inheritance, which are essential for building complex applications. You will also learn about agile software development principles, contributing to your ability to work effectively in a team. Aspiring application developers who want to gain a strong foundation in C# and object-oriented design may find this course beneficial.
Software Engineer
A software engineer applies engineering principles to software development, ensuring the creation of reliable and efficient software systems. This course helps build a strong base in object-oriented programming with C#, which is fundamental to software engineering. The course covers object-oriented design principles, such as abstraction, dependency injection, and the open-closed principle. Understanding these principles, as taught in this course, is valuable for designing and implementing maintainable and scalable software. Software engineers who want a deeper understanding of object-oriented programming and the C# language may find this course particularly useful.
Software Architect
A software architect is responsible for high-level design choices and technical standards, including software coding standards, tools, and platforms. This course may provide insights into object-oriented programming (OOP) principles using C#, which can inform architectural decisions. Software architecture requires a strong understanding of design patterns, and this course covers key OOP concepts like abstraction, dependency injection, and the open-closed principle. While a software architect typically requires advanced experience, grasping the fundamentals taught can help you prepare for architectural responsibilities. Software architects can leverage this knowledge to guide development teams in building robust and maintainable software systems.
Game Developer
A game developer creates video games for various platforms utilizing programming languages and game engines. This course helps build a foundational understanding of object-oriented programming with C#, a language commonly used in game development, especially with the Unity game engine. The course covers key concepts like objects, polymorphism, and inheritance, which are essential for creating game mechanics and systems. Learning how to apply object-oriented design principles, as taught in this course, can lead to the development of more modular, scalable, and maintainable game code. Game developers seeking to improve their C# skills and object-oriented programming knowledge may find this course helpful.
Web Developer
A web developer builds websites and web applications, often using a variety of programming languages and frameworks. This course may be useful for web developers who work with C# in the .NET environment for backend development. The course provides a foundation in object-oriented programming principles, which are applicable to designing and building robust web applications. Learning about object composition, class inheritance, and object substitution, as covered in this course, can help improve the structure and maintainability of web application code. Web developers looking to enhance their understanding of C# and object-oriented development may find this course beneficial.
Mobile App Developer
A mobile app developer specializes in creating applications for mobile devices, such as smartphones and tablets. This course may be useful for mobile app developers who use C# with frameworks like Xamarin or .NET MAUI to build cross-platform mobile applications. The course provides an introduction to object-oriented programming, which is essential for structuring and organizing mobile app code. The course also covers concepts such as abstraction and dependency injection. Mobile app developers who want to strengthen their object-oriented programming skills in C# may find this course helpful.
Quality Assurance Engineer
A quality assurance engineer tests software to ensure it meets specified standards and requirements. This course may provide a better understanding of the code they are testing. Understanding object-oriented programming principles can improve the ability to identify and report defects. This course covers concepts like objects, polymorphism, and inheritance, which can help in designing effective test cases and strategies. Quality assurance engineers seeking to improve their understanding of C# and object-oriented programming may find this course beneficial.
DevOps Engineer
A DevOps engineer focuses on automating and streamlining the software development lifecycle. This course may be useful for DevOps engineers who work with .NET environments and need to understand the code being deployed and managed. While DevOps roles are more focused on infrastructure and automation, understanding the principles of object-oriented programming with C# can help in troubleshooting and optimizing application deployments. The course covers object-oriented design principles, which can provide insights into the structure and behavior of applications. DevOps engineers who want a better understanding of the applications they manage may find this course helpful.
Database Administrator
A database administrator (DBA) manages and maintains databases, ensuring data integrity, security, and availability. This course may provide a useful background as database interactions are often part of a larger system. The course covers understanding C# code and object-oriented programming principles. While a DBA's primary focus is on database systems, having knowledge of how applications interact with databases can aid in troubleshooting and performance tuning. Aspiring DBAs may find this course useful.
Technical Writer
A technical writer creates documentation for software and hardware, including user manuals, API documentation, and tutorials. This course may be useful for technical writers who need to document C# code or .NET applications. Understanding object-oriented programming principles, as covered in this course, can help in accurately describing the structure and functionality of software components. The course teaches about objects, polymorphism, and inheritance, which are essential concepts in object-oriented documentation. Technical writers looking to improve their understanding of C# and object-oriented programming may find this course beneficial.
IT Support Specialist
An IT support specialist provides technical assistance to users, troubleshooting hardware and software issues. This course may give an IT support specialist insights into the underlying structure of C# programs. Although IT support typically does not require programming expertise, understanding basic object-oriented programming concepts can help in diagnosing software-related problems. The course covers object-oriented design principles, which may assist in understanding error messages and application behavior. IT support specialists who want to expand their knowledge of software development may find this course useful.
Data Analyst
A data analyst examines data to identify trends, patterns, and insights that can inform business decisions. While this course primarily focuses on object-oriented programming with C#, it may be useful for data analysts who work with applications that use C# in their backend. Understanding how these applications are structured and how they process data can aid in analyzing the data they produce. This course covers fundamental programming concepts that may be applicable to data analysis tasks. Data analysts looking to broaden their understanding of the systems generating the data they analyze may find this course helpful.
Project Manager
A project manager plans, executes, and closes projects, ensuring they are completed on time and within budget. This course may be useful for project managers who oversee software development projects that use C#. Understanding object-oriented programming principles can improve communication with development teams and provide a better understanding of project scope and complexity. The course covers agile software development principles, enhancing your ability to manage software projects effectively. Project managers looking to gain a better understanding of C# development may find this course helpful.

Reading list

We've selected two books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Beginning Object-oriented Programming with C#.
Provides a visually rich and engaging introduction to C#. It covers the fundamentals of the language and object-oriented programming concepts in an accessible manner. It useful resource for beginners who prefer a more interactive and less formal learning style. This book can be used as a reference text.
Classic text on object-oriented design patterns. It introduces common design patterns and provides examples of how to apply them in software development. While not specific to C#, the principles and patterns discussed are applicable to any object-oriented language. This book is more valuable as additional reading than it is as a current reference.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Similar courses are unavailable at this time. Please try again later.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser