¿Cuáles son los mejores recursos para aprender sobre Programación Orientada a Objetos?

Únase a una comunidad de estudiantes que están estudiando OOP en este momento: BeeHyve.io – Comunidad en línea para ciencias de la computación

1 / Aquí hay algunas clases universitarias de OOP a las que puedes asistir o mirar conferencias

  • Princeton
    • COS 126 Programación Orientada a Objetos
  • marrón
    • CS 15 Programación Orientada a Objetos
  • Stanford
    • CS 108 Programación OO
  • Universidad de Washington en St. Louis
    • CS 142 Programación de Computadora I
    • CS 143 Programación Computacional II
  • Georgia Tech
    • CS 1331 Introducción a la Programación OO
  • Cornejo
    • lCS 2110 OO Programación y Estructuras de Datos
  • MiT
    • Programación Orientada a Objetos 6.01

2 / Aprender temas fundamentales en OOP:

Matrices, Colecciones, Complejidad, Condicionales, Herencia, Listas enlazadas, Bucles, Polimorfismo, Colas, Recursión, Pilas, Árboles

Al mirar los videos de Gcreddy puedes aprender por tu cuenta.

Java OOPS (Sistema de Programación Orientada a Objetos)

Declaraciones de Java OOPS

Fundamentos de OOPS

i) Herencia

ii) polimorfismo

iii) abstracción

iv) encapsulación

i) Herencia

> Es un proceso de herencia (reutilización) de los miembros de la clase (variables y métodos) de una clase a otra.

> La Clase en la que se heredan los miembros de la clase se denomina Super Clase / Clase principal / Clase base

> La Clase a la que se heredan los miembros de la clase se denomina Subclase / Clase secundaria / Clase derivada.

> La herencia entre la Superclase y la Subclase se logra usando la palabra clave “extiende”.

Estática vs. Métodos no estáticos

> Las variables de instancia no se pueden usar en métodos estáticos, pero podemos usar variables estáticas y de instancia en

Métodos no estáticos.

> Los métodos no estáticos no se pueden llamar dentro de los métodos estáticos, pero podemos llamar estáticos y no estáticos

Métodos dentro de los métodos no estáticos.

Ejemplo:

clase pública clase 1 {

// Variable Estática

estática int a = 10;

//Instancia variable

int b = 20;

// Método estático

vacío estático público abc () {

System.out.println (a);

}

// Método no estático

vacío público abc2 () {

System.out.println (a + b);

}

vacío estático público abc3 () {

System.out.println (“Es un método estático”);

// abc2 ();

a B C();

}

vacío público abc4 () {

System.out.println (“Es un método no estático”);

a B C();

abc2 ();

}

public static void main (String [] args) {

a B C();

abc3 ();

Class1 obj = new Class1 ();

obj.abc2 ();

obj.abc4 ();

}

}

Tipos de herencia

i) Herencia única

Ex:

ClassB extiende ClassA

ClassA – Super Class

ClassB – Sub Class

ii) Herencia multinivel

ClassB extiende ClassA

ClassC extiende ClassB

ClassC – Subclase / Clase de niño

ClassB – Parent for ClassC, Child Class for ClassA

ClassA – Parent for ClassB, Grand Parent for ClassC

iii) Herencia múltiple (* Java no admite herencia múltiple)

Ex:

ClassB extiende ClassA

ClassB extiende ClassD

Ejemplos:

clase pública clase 1 {

int a = 10;

int b = 20;

public void add () {

System.out.println (a + b);

}

public static void main (String [] args) {

Class1 obj = new Class1 ();

obj.add ();

System.out.println (obj.a);

int res = obj.b;

System.out.println (res);

}

}

Clase 2 (Reutilizando a los padres miembros de la clase con herencia)

clase pública clase 2 extiende clase 1 {

public static void main (String [] args) {

Class2 xyz = new Class2 ();

xyz.add ();

int x = xyz.b;

System.out.println (x);

}

}

Clase 2 (Reutilizando a los padres miembros de la clase sin herencia)

clase pública clase 2 {

public static void main (String [] args) {

Class1 xyz = new Class1 ();

xyz.add ();

int x = xyz.b;

System.out.println (x);

}

}

clase pública clase 2 extiende clase 1 {

int a = 5;

int b = 7;

/ * public void add () {

System.out.println (a + b);

} * /

público vacío multiplicar () {

System.out.println (a * b);

}

public static void main (String [] args) {

Class2 xyz = new Class2 ();

xyz.add ();

xyz.multiply ();

int x = xyz.b;

System.out.println (x);

}

}

1) Dos clases en el mismo paquete / proyecto

proyecto: proyecto1

paquete: abcd

clases: Class1, Class2

2) Dos clases en dos paquetes diferentes en el mismo proyecto

proyecto: proyecto1

paquetes: abcd, xyz

clases: Class1 (abcd), Class2 (xyz)

3) Dos clases en dos paquetes diferentes en proyectos diferentes

proyecto: proyecto1, proyecto2

paquetes: abcd (proyecto1), abcd2 (proyecto2)

clases: Class1 (abcd / project1), Class2 (abcd2 / project2)

Reutilizando miembros de clase de otro paquete en el mismo proyecto

paquete xyz;

importar abcd.Class1;

clase pública clase 2 extiende clase 1 {

public static void main (String [] args) {

Class2 obj = new Class2 ();

obj.add ();

int x = obj.b;

System.out.println (x);

}

Reutilizando miembros de la clase de otro paquete en otro proyecto

clase pública clase 3 extiende clase 1 {

public static void main (String [] args) {

Class3 abc = new Class3 ();

abc.add ();

int x = abc.b;

System.out.println (x);

}

}

Herencia Multi Nivel

Clase 1:

clase pública clase A

int a = 10;

int b = 20;

public void add () {

System.out.println (a + b);

}

public static void main (String [] args) {

ClassA obj1 = new ClassA ();

obj1.add ();

}

}

Clase 2:

clase pública ClassB extiende ClassA {

int a = 1;

int b = 2;

public void add () {

System.out.println (a + b);

}

public static void main (String [] args) {

ClassB obj2 = new ClassB ();

obj2.add ();

}

}

Clase 3:

clase pública ClassC extiende ClassB {

int a = 100;

int b = 200;

public void add () {

System.out.println (a + b);

}

public static void main (String [] args) {

ClassC obj3 = new ClassC ();

obj3.add ();

}

}

clase pública ClassC extiende ClassB {

int a = 100;

int b = 200;

public void add3 () {

System.out.println (a + b);

}

public static void main (String [] args) {

ClassC obj3 = new ClassC ();

obj3.add1 (); // 30

obj3.add2 (); // 3

obj3.add3 (); // 300

}

}

ii) polimorfismo

Existencia de comportamiento del objeto en muchas formas.

Dos tipos de polimorfismo

1) compile Time Polymorphism / Method OverLoading

2) Polimorfismo en tiempo de ejecución / Anulación del método

1) Polimorfismo de tiempo de compilación / OverLoading de método

Si hay dos o más métodos con el mismo nombre en la misma clase pero difieren de las siguientes maneras.

a) Número de argumentos

b) Tipo de Argumentos

Ejemplo para el método OverLoading

add público vacío (int a, int b) {

System.out.println (a + b);

}

public void add (int a, int b, int c) {

System.out.println (a + b + c);

}

Añadir público vacío (doble a, doble b) {

System.out.println (a + b);

}

public static void main (String [] args) {

Class1 obj = new Class1 ();

obj.add (1.234, 3.456);

obj.add (10,20,30);

obj.add (10,20);

}

}

2) Polimorfismo en tiempo de ejecución / Anulación del método

Si hay dos o más métodos con el mismo nombre disponibles en la Superclase y la Subclase

Ejemplo para anular el método

Clase 1:

clase pública clase 1 {

int a = 10, b = 20;

public void add () {

System.out.println (a + b);

}

public static void main (String [] args) {

}

}

Clase 2:

clase pública clase 2 extiende clase 1 {

int a = 100, b = 200;

public void add () {

System.out.println (a + b);

}

public static void main (String [] args) {

Class2 obj = new Class2 ();

obj.add (); // 300

Class1 obj2 = new Class1 ();

obj2.add (); // 30

}

}

Esta es una de las preguntas más “amplias” que he respondido, pero merece una respuesta veraz.

Primero debes aprender un lenguaje no orientado a objetos (preferiblemente C como yo lo hice, y me convenía porque tengo una mentalidad más procesal y funcional)

Luego, debes aprender un idioma como … (no C ++) pero Ruby (que es OOP puro) o Python (mi idioma favorito) en el que siempre puedes programar en OOP puro si lo deseas.

Básicamente, lo que estoy tratando de explicar es que para entender qué es realmente OOP, primero debes entender qué no es y qué puedes hacer sin OOP; luego, una vez que aprendas OOP, aprenderás cómo aplicar los conceptos a la áreas adecuadas y aprenderá cuándo la programación funcional o de procedimiento es mejor para su solución.

No puedo pararme cuando veo una clase con 2 métodos en python, uno de los métodos es “__init__”. ¿Sabes cómo lo llamo? ¡Una función!

Si su clase tiene 3 métodos y uno de ellos es obviamente __init__, entonces lo más probable es que sea una función porque puedo tomar sus n líneas de código y disminuirlas por un factor de 2 o 3, si tiene una clase que tiene 2 métodos entonces ¿por qué tienes una clase en absoluto? Podría haber comenzado con def en lugar de clase y omitir init y haberse ahorrado n líneas allí mismo.

En cualquier caso, la respuesta es: aprenda cómo aplicar el código que no es OOP y qué puede hacer sin OOP, para comprender mejor cómo OOP se aplica mejor en las mejores prácticas.

Gracias,

Brandon b

El mejor recurso sería tu tiempo.
Solo necesitas invertir suficiente tiempo para aprender OOP. Compre un libro de programación simple pero genial orientado a objetos que se tomará el tiempo de hacerle entender cada cosa sobre la POO.

Te sugiero que compres y aventures en uno de los siguientes:

  1. Java: La referencia completa de Herbert Schildt
  2. C # La referencia completa de Herbert Schildt

La mayoría de los libros de programación no gastan el tiempo y el esfuerzo suficientes para hacerle comprender un tema. Los libros de referencia completos de Herbert Schildt se destacan aquí.
** Muchos programadores dirán francamente que estos libros son demasiado fáciles, yo diría que “los chicos se comportan bien, no tomen una decisión inmediata. Tómense un poco de tiempo y vean el propósito de los libros. Definitivamente puedo decirles que se sorprenderán”. por el esfuerzo dado por el autor para hacerte entender cada cosa.

Asegúrese de echar un vistazo a los patrones de diseño orientados a objetos:
Patrones de diseño | Diseño orientado a objetos
Estudíelos muy bien, entiéndalos y asegúrese de saber cuándo y cómo es apropiado usarlos.

Pero, no los uses solo porque existen. Úsalos cuando encuentres un problema que crees que se resolvería fácilmente usando uno de estos patrones.

En primer lugar, el aprendizaje es más efectivo cuando se realiza a través de la mentoría, por lo tanto, si tiene un experto disponible que está dispuesto a guiarlo, tómelo.

Aquí hay algunos libros que recomiendo:
Agile Java ™: Crafting Code with Test-Driven Development: Jeff Langr: 9780131482395: Amazon.com: Libros

UML Destilled: una breve guía para el lenguaje de modelado de objetos estándar (3ª edición): Martin Fowler: 0785342193688: Amazon.com: Libros

¡Buena suerte!

Mantener las cosas en perspectiva. El programa de guía de la cápsula Apollo, los grandes sistemas de reservas de las aerolíneas, el sistema SAGE, el sistema operativo IBM 360, Windows, Space Invaders, Apple II, Macintosh, IBM PC, sus cuentas bancarias y de servicios públicos, se implementaron con éxito utilizando software sin un solo fragmento de
Objeto.
Los objetos son buenos y maravillosos que se usaron adecuadamente, pero no son la única panacea para el desarrollo de software.

No hay mejor tutorial o recurso mejor que http://developer.apple.com

Incluso este es un buen sitio. http://www.raywenderlich.com/
Primero siga adelante con este http://www.raywenderlich.com/179

Si desea aprender la programación de Cocoa / Mac, el mejor libro es Aaron Hillegass – Programación de Cocoa para MacOSX

Me gusta BlueJ (BlueJ). Hay libros y tutoriales asociados con él, ver: BlueJ

Encontré este video muy útil:

Abarca los principios fundamentales de la POO.

Codecademia. Hace un trabajo más que excelente para que se enseñen los fundamentos y se obtiene una práctica real con ellos.