We may earn an affiliate commission when you visit our partners.
Course image
Fabio Kon

Estamos muito felizes de lançar agora este curso que apresenta os conceitos mais importantes em torno do paradigma de desenvolvimento mais comum da indústria de software hoje: a Programação Orientação a Objetos (POO).

Read more

Estamos muito felizes de lançar agora este curso que apresenta os conceitos mais importantes em torno do paradigma de desenvolvimento mais comum da indústria de software hoje: a Programação Orientação a Objetos (POO).

Oferecido pelo Departamento de Ciência da Computação do Instituto de Matemática e Estatística da USP, o curso é voltado para quem já conhece os conceitos básicos de POO e quer se aprofundar no assunto, tornando-se um excelente programador. Ele funciona bem como uma sequência natural aos 2 cursos anteriores do Prof. Fabio Kon do IME-USP no coursera: Introdução à Ciência da Computação com Python. Se você ainda não sabe programar, deve começar por este outro curso: https://www.coursera.org/learn/ciencia-computacao-python-conceitos

Mas, se você já sabe programar em outra linguagem confortavelmente, pode vir direto para este curso sem grandes dificuldades. A maior parte dos exemplos de código serão em Java e Python e apresentamos uma pequena visão geral dessas linguagens no início do curso.

O curso é dividido em duas partes de aproximadamente 6 semanas cada. Nesta Parte 1, os tópicos cobertos são:

(1) Recapitulação dos conceitos básicos de POO

(2) UML (Linguagem Unificada de Modelagem OO)

(3) Linguagens interpretadas vs. compiladas

(4) Orientação a Objetos em Java e em Python

(5) Qualidade de Código e Boas Práticas de Programação OO

(6) Bugs, depuração e testes

(7) Linguagens dinâmicas vs. estáticas

(8) Classes abstratas e interfaces

(9) Coleções de Objetos

(10) Polimorfismo

(11) Tratamento de Exceções

(12) Streams (Fluxos de dados)

(13) Padrões de Projeto (Design Patterns) - Estratégia, Adaptador, Singleton, Método Fábrica, Fábrica Abstrata, Protótipo, Estado

(14) Model-View-Controller (MVC)

Matricule-se!

Estamos esperando por você! Se tiver alguma dúvida, escreva no fórum!

Fabio Kon e equipe do IME-USP

Enroll now

What's inside

Syllabus

Semana 1 - Recapitulação de Orientação a Objetos
Seja bem-vindo ao curso! Nesta primeira semana, vamos apresentar a ideia geral do curso, recapitular os conceitos básicos de Orientação a Objetos (OO), apresentar a linguagem UML de modelagem de sistemas OO e discutir a diferença entre linguagens compiladas, interpretadas e híbridas. Caso você tenha alguma dúvida ou queira discutir algum assunto de OO, não deixe de postar sua mensagem no Fórum de discussão!
Read more

Traffic lights

Read about what's good
what should give you pause
and possible dealbreakers
Introduces the core tenets of OOP, including inheritance, encapsulation, and polymorphism
Taught by instructors at the University of São Paulo, one of the top learning institutions in the world
Examines OO concepts by utilizing UML, a standardized modeling language
Discusses both interpreted and compiled languages, highlighting their distinct features
Compares and contrasts OO design in Java and Python, making it accessible to students from diverse backgrounds
Covers core OOP principles, making it a valuable resource for beginners aiming to deepen their knowledge

Save this course

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

Reviews summary

Aprofundamento em poo com java e python

Segundo os estudantes, este curso é um aprofundamento essencial para quem busca dominar a Programação Orientada a Objetos. Muitos destacam que o curso consolida conceitos fundamentais de POO e apresenta UML e padrões de projeto (Design Patterns) de forma clara e aplicável. A abordagem com exemplos em Java e Python é bem recebida, embora alguns alertem sobre a necessidade de ter uma base sólida em programação antes de iniciar. As atividades práticas e os labs são frequentemente elogiados por ajudarem na fixação do conteúdo. É considerado um curso altamente relevante para o mercado de trabalho, especialmente para quem almeja se tornar um desenvolvedor de software mais qualificado.
Utiliza exemplos práticos em Java e Python, enriquecendo o aprendizado.
"Gostei muito da abordagem dupla com Java e Python, me deu uma visão mais ampla e versátil das linguagens."
"Foi ótimo ver os conceitos aplicados em duas linguagens tão importantes e relevantes no mercado de trabalho."
"A transição entre Java e Python foi bem gerenciada, facilitando a compreensão e a adaptação dos exemplos."
As atividades de laboratório são eficazes para fixar os conceitos.
"Os exercícios práticos são bem elaborados e realmente ajudam a entender a teoria em profundidade."
"Adorei os laboratórios, me permitiram codificar e aplicar o que aprendi imediatamente após as aulas."
"É um curso muito mão na massa, o que é excelente para aprender POO de verdade e desenvolver habilidades."
Aborda Design Patterns e MVC, com foco na aplicabilidade industrial.
"Os módulos sobre Design Patterns e MVC foram o ponto alto, com exemplos que posso usar no meu dia a dia de trabalho."
"Finalmente entendi como aplicar os padrões de projeto de forma eficaz para construir software robusto."
"Aprender sobre MVC foi crucial para entender arquiteturas de sistemas reais e como elas são estruturadas."
Consolida e aprofunda os conceitos de Programação Orientada a Objetos.
"O curso me ajudou a revisar e solidificar os conceitos básicos de POO, além de ir muito além do esperado."
"Sinto que agora tenho uma compreensão muito mais robusta sobre o paradigma de objetos e seus pilares."
"Foi uma excelente continuação do curso básico, realmente aprofundou meu conhecimento de forma prática."
Exige conhecimento prévio de programação e POO para bom aproveitamento.
"É fundamental ter uma base sólida em programação e POO, senão o ritmo pode ser muito rápido e desafiador."
"Para iniciantes, o curso pode ser um pouco complexo; recomendo fazer os cursos introdutórios antes de iniciar este."
"Não é para quem está começando do zero, mas sim para quem busca um aprofundamento real e consistente."

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 Laboratório de Programação Orientada a Objetos - Parte 1 with these activities:
Revise basic programming constructs
Reviewing these foundational concepts of programming will help to strengthen your understanding of the more advanced topics covered in this course.
Show steps
  • Go over your notes or textbooks from previous programming courses.
  • Complete some practice problems or exercises to test your understanding.
  • Participate in online forums or discussion groups to engage with other learners.
Review of UML
Refreshes understanding of UML, which lays the foundation for OO software design and is covered in the first week.
Browse courses on UML
Show steps
  • Read about the basics of UML class diagrams.
  • Study examples of UML class diagrams.
  • Create a simple UML class diagram for a familiar object.
Solve OO Code Challenges
Solving coding challenges will help you apply the OO concepts you learn in the course and improve your problem-solving skills.
Show steps
  • Find online coding challenges or use resources like LeetCode or HackerRank
  • Choose challenges that focus on OO concepts like inheritance, polymorphism, and encapsulation
  • Implement solutions in your preferred programming language
  • Compare your solutions to others or submit them for feedback
Show all three activities

Career center

Learners who complete Laboratório de Programação Orientada a Objetos - Parte 1 will develop knowledge and skills that may be useful to these careers:
Software Architect
A Software Architect is responsible for translating business requirements into technical solutions. They must have a deep understanding of software development principles and best practices. This course provides a foundation in object-oriented programming, a paradigm widely used in the software industry. The course covers important concepts of object-oriented programming, such as encapsulation, abstraction, inheritance, and polymorphism that are essential for Software Architects.
Software Engineer
Software Engineers apply programming fundamentals and software development technologies to the design, development, maintenance, testing, and evaluation of computer software. This course will help you develop the skills necessary to build a foundation in the main concepts of object-oriented programming.  You will cover topics like: encapsulation, abstraction, inheritance, and polymorphism. These concepts are essential for any aspiring or practicing Software Engineer.
Systems Analyst
Systems Analysts help organizations improve their business processes by designing and implementing computer systems. They must have a strong understanding of systems thinking and object-oriented programming. This course provides a foundation in object-oriented programming, a paradigm that is widely used in the industry for designing and implementing complex systems. The course covers important concepts of object-oriented programming, such as encapsulation, abstraction, inheritance, and polymorphism that are essential for Systems Analysts.
Machine Learning Engineer
Machine Learning Engineers design and develop machine learning models. They must have a strong understanding of machine learning algorithms and object-oriented programming. This course provides a foundation in object-oriented programming, a paradigm widely used in the machine learning industry. The course covers important concepts of object-oriented programming, such as encapsulation, abstraction, inheritance, and polymorphism that are essential for Machine Learning Engineers.
Computer Programmer
Computer Programmers create and maintain computer programs. They use programming languages to translate ideas into instructions that computers can understand. This course teaches the fundamentals of object-oriented programming, a programming paradigm widely used in the industry. The course covers important concepts like encapsulation, abstraction, inheritance, and polymorphism that are essential for a Computer Programmer.
Business Analyst
Business Analysts help organizations understand their business needs and develop solutions to improve their operations. They must have a strong understanding of business processes and object-oriented programming. This course provides a foundation in object-oriented programming, a paradigm widely used in the business analysis industry. The course covers important concepts of object-oriented programming, such as encapsulation, abstraction, inheritance, and polymorphism that are essential for Business Analysts.
Software Test Engineer
Software Test Engineers test and evaluate software products to ensure that they meet quality standards. They must have a strong understanding of software testing principles and object-oriented programming. This course provides a foundation in object-oriented programming, a paradigm widely used in the software testing industry. The course covers important concepts of object-oriented programming, such as encapsulation, abstraction, inheritance, and polymorphism that are essential for Software Test Engineers.
Software Quality Assurance Analyst
Software Quality Assurance Analysts test and evaluate software products to ensure that they meet quality standards. They must have a strong understanding of software testing principles and object-oriented programming. This course provides a foundation in object-oriented programming, a paradigm widely used in the software quality assurance industry. The course covers important concepts of object-oriented programming, such as encapsulation, abstraction, inheritance, and polymorphism that are essential for Software Quality Assurance Analysts.
Data Scientist
Data Scientists use data to solve business problems. They must have a strong understanding of data analysis techniques and object-oriented programming. This course provides a foundation in object-oriented programming, a paradigm widely used in the data science industry. The course covers important concepts of object-oriented programming, such as encapsulation, abstraction, inheritance, and polymorphism that are essential for Data Scientists.
Technical Writer
Technical Writers create documentation for software and other technical products. They must have a strong understanding of technical writing principles and object-oriented programming. This course provides a foundation in object-oriented programming, a paradigm widely used in the technical writing industry. The course covers important concepts of object-oriented programming, such as encapsulation, abstraction, inheritance, and polymorphism that are essential for Technical Writers.
Web Developer
Web Developers design, develop, and maintain websites and web applications. They must have a strong understanding of object-oriented programming and web development technologies. This course provides a foundation in object-oriented programming, a paradigm widely used in the web development industry. The course covers important concepts of object-oriented programming, such as encapsulation, abstraction, inheritance, and polymorphism that are essential for Web Developers.
Database Administrator
Database Administrators are responsible for managing and maintaining databases. This may involve designing and implementing database systems, as well as ensuring the security and integrity of data. This course provides a foundation in object-oriented programming, a paradigm widely used in the database industry. The course covers important concepts of object-oriented programming, such as encapsulation, abstraction, inheritance, and polymorphism that are essential for Database Administrators.
Project Manager
Project Managers lead and manage projects to successful completion. They must have a strong understanding of project management techniques and object-oriented programming. This course provides a foundation in object-oriented programming, a paradigm widely used in the project management industry. The course covers important concepts of object-oriented programming, such as encapsulation, abstraction, inheritance, and polymorphism that are essential for Project Managers.
IT Manager
IT Managers plan, direct, and coordinate the activities of an organization's IT department. They must have a strong understanding of IT management principles and object-oriented programming. This course provides a foundation in object-oriented programming, a paradigm widely used in the IT management industry. The course covers important concepts of object-oriented programming, such as encapsulation, abstraction, inheritance, and polymorphism that are essential for IT Managers.
Information Security Analyst
Information Security Analysts plan and implement security measures to protect an organization's computer systems and networks. They must have a strong understanding of information security principles and object-oriented programming. This course provides a foundation in object-oriented programming, a paradigm widely used in the information security industry. The course covers important concepts of object-oriented programming, such as encapsulation, abstraction, inheritance, and polymorphism that are essential for Information Security Analysts.

Reading list

We've selected 13 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 Laboratório de Programação Orientada a Objetos - Parte 1.
Must-read for any Java developer. It covers the best practices for writing Java code. It also provides a lot of practical advice on how to write code that is efficient, reliable, and maintainable.
Classic on design patterns. It describes a number of design patterns that can be used to solve common problems in software development. It valuable resource for any developer who wants to learn how to write reusable and maintainable code.
Good choice for beginners who want to learn about design patterns. It uses a visual approach to teaching design patterns, which makes it easy to understand. It also covers a wide range of design patterns, from the basics to more advanced patterns.
Good choice for beginners who want to learn Java. It uses a visual approach to teaching Java, which makes it easy to understand. It also covers a wide range of topics, from the basics of Java to more advanced topics, such as GUI programming and networking.
Classic on domain-driven design. It provides a lot of practical advice on how to design software that is aligned with the business domain. It valuable resource for any developer who wants to learn how to write software that is both useful and maintainable.
Comprehensive introduction to computer networks. It covers the basics of network design, implementation, and use. It valuable resource for any developer who wants to learn more about computer networks.
Comprehensive introduction to operating systems. It covers the basics of operating system design, implementation, and use. It valuable resource for any developer who wants to learn more about operating systems.
This textbook that provides a comprehensive introduction to Java programming. It covers the basics of Java, such as data types, control flow, and object-oriented programming. It also covers more advanced topics, such as GUI programming, networking, and database programming.
Comprehensive introduction to compiler construction. It covers the basics of compiler design, implementation, and use. It valuable resource for any developer who wants to learn more about compilers.
Good choice for anyone who wants to learn about agile software development. It covers the principles, patterns, and practices of agile development. It valuable resource for anyone who wants to improve their software development process.

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