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
Semana 2
Nesta semana, vamos iniciar aprendendo a sintaxe das linguagens Java e Python para orientação a objetos. A maioria dos exemplos de código deste curso serão em Java e Python, portanto, você deve ser capaz de compreender código escrito em ambas as linguagens. Caso você já tenha feito o nosso curso anterior do Coursera "Introdução à Ciência da Computação com Python", você já conhece bem a sintaxe de Python e pode pular, sem problema, os dois vídeos de OO em Python. Caso você já conheça bem Java, pode pular o vídeo de introdução à Java e ir diretamente para o Quiz correspondente. Se tiver alguma dúvida, pode postá-la no fórum de discussão.
Semana 3
Nesta semana, vamos falar de conceitos importantes de Orientação a Objetos como Polimorfismo, Classes Abstratas, Interfaces e Coleções de objetos. Além disso, vamos também pontuar as principais diferenças entre linguagens dinâmicas e estáticas e suas principais características. Se tiver alguma dúvida, pode postá-la no fórum de discussão.
Semana 4
Nesta semana, aprenderemos dois mecanismos úteis em linguagens orientadas a objetos: Tratamento de Exceções e Streams (Fluxos de Dados). Se tiver alguma dúvida, não se esqueça de postá-la no fórum de discussão.
Semana 5
Os Padrões de Projeto de Software Orientado a Objetos (Design Patterns) são uma ferramenta poderosa para a transmissão de conhecimento em desenvolvimento de software. Nesta semana, aprenderemos o que são esses padrões e começaremos a ver alguns exemplos deles.
Semana 6
Nesta semana aprenderemos os padrões de projeto Protótipo e Estado. Além disso, veremos um outro tipo de padrão: os Padrões Arquiteturais; neste caso o padrão arquitetural que estudaremos é o Model-View-Controller (MVC) que é muito usado na indústria de software.

Good to know

Know what's good
, what to watch for
, 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

Save Laboratório de Programação Orientada a Objetos - Parte 1 to your list so you can find it easily later:
Save

Reviews summary

Comprehensive guide to object-oriented programming

This comprehensive course on Object-Oriented Programming (OOP) provides a solid introduction to the subject. With a focus on industry-standard practices, the course covers a wide range of topics including UML modeling, design patterns, and code quality. The clear and engaging teaching style makes complex concepts accessible to learners of various levels.
Provides a strong foundation in OOP principles.
"this course has shown me the nuts and bolts of OOP and its advantages."
Covers industry-standard practices and design patterns.
"very good to place the program in a 2d plane, expliciting the relationships between the classes that will be necessary."
"Using POO to have a vision of code reuse in classes (concrete and abstract) making development more flexible and organizable"
Excellent teaching style makes concepts easy to understand.
"the manner how the content is chained and the way it is presented make everything seem easy. "
Final project involves peer review.
"Curso bom. Porém, o sistema de avaliação final é horrível."
"Você é avaliado por outros estudantes, que nem sempre compreendem bem os conceitos para poderem te avaliar."
Limited hands-on programming exercises.
"Estava com expectativas altas para este curso, pois está com uma nota muito boa, porém acabei me decepcionando bastante."
"Achei que após fazer este curso eu ficaria com um conhecimento muito bom de programação orientada a objetos, porém achei o conteúdo superficial demais."
"Acho que não é possível realmente aprender sem fazer exercícios de programação."

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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.

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

Here are nine courses similar to Laboratório de Programação Orientada a Objetos - Parte 1.
Introdução à Ciência da Computação com Python Parte 1
Most relevant
Introdução à Ciência da Computação com Python Parte 2
Most relevant
Laboratório de Programação Orientada a Objetos - Parte 2
Most relevant
Processamento Neural de Linguagem Natural em Português I
Most relevant
Orientação a Objetos com Java
Most relevant
Programação Python do Zero ao Avançado + Projetos Reais
Most relevant
TDD – Desenvolvimento de Software Guiado por Testes
Most relevant
Formação Cientista de Dados: O Curso Completo
Most relevant
Python para a Ciência de Dados e IA
Most relevant
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 - 2024 OpenCourser