{"id":3096,"date":"2018-03-21T01:20:52","date_gmt":"2018-03-21T06:20:52","guid":{"rendered":"https:\/\/www.manualjava.net\/?p=3096"},"modified":"2018-03-22T16:58:27","modified_gmt":"2018-03-22T21:58:27","slug":"clases-y-objetos","status":"publish","type":"post","link":"https:\/\/www.manualjava.net\/?p=3096","title":{"rendered":"Clases y objetos I"},"content":{"rendered":"<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-3099\" src=\"https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/03\/java54.png\" alt=\"\" width=\"209\" height=\"111\" \/><\/p>\n<p><span style=\"color: #000000;\">El paradigma orientado a objetos naci\u00f3 en 1969 de la mano del doctor noruego Kristin Nygaard, quien intentando escribir un programa de computadora que describiera el movimiento de los barcos a trav\u00e9s de un fiordo, descubri\u00f3 que era muy dif\u00edcil simular las mareas, los movimientos de los barcos y las formas de la l\u00ednea de la costa con los m\u00e9todos de programaci\u00f3n existentes en ese momento.\u00a0 \u00a0<\/span><span style=\"color: #000000;\"><!--more--><\/span><\/p>\n<p><span style=\"color: #000000;\">Las tecnolog\u00edas orientadas a objetos han evolucionado mucho pero mantienen la raz\u00f3n de ser del paradigma: combinaci\u00f3n de la descripci\u00f3n de los elementos en un entorno de proceso de datos con las acciones ejecutadas por esos elementos. Las clases y los objetos como instancias o ejemplares de ellas, son los elementos clave sobre los que se articula la orientaci\u00f3n a objetos.<\/span><\/p>\n<h2><strong><span style=\"color: #000000;\">\u00bfQu\u00e9 son objetos?<\/span><\/strong><\/h2>\n<p><span style=\"color: #000000;\">En el mundo real, las personas identifican los objetos como cosas que pueden ser percibidas por los cinco sentidos. Los objetos tienen propiedades espec\u00edficas, como posici\u00f3n, tama\u00f1o, color, forma, textura, etc., que definen su estado. Los objetos tambi\u00e9n tienen ciertos comportamientos que los hacen diferentes de otros objetos.<\/span><\/p>\n<p><span style=\"color: #000000;\">Martin\/Odell definen un objeto como \u00abcualquier cosa, real o abstracta, en la que se almacenan datos y aquellos m\u00e9todos (operaciones) que manipulan los datos\u00bb. Para realizar esa actividad se a\u00f1aden a cada objeto de la clase los propios datos y asociados con sus propios m\u00e9todos miembro que pertenecen a la clase.<\/span><\/p>\n<h2><strong><span style=\"color: #000000;\">\u00bfQu\u00e9 son clases?<\/span><\/strong><\/h2>\n<p><span style=\"color: #000000;\">En t\u00e9rminos pr\u00e1cticos, una clase es un tipo definido por el usuario. Las clases son los bloques de construcci\u00f3n fundamentales de los programas orientados a objetos. Booch denomina a una clase como \u00ab<strong>un conjunto de objetos que comparten una estructura y comportamiento comunes\u00bb<\/strong>.<\/span><\/p>\n<p><span style=\"color: #000000;\">Una clase contiene la especificaci\u00f3n de los datos que describen un objeto junto con la descripci\u00f3n de las acciones que un objeto conoce como ha de ejecutar. Estas acciones se conocen como servicios o m\u00e9todos. Una clase incluye tambi\u00e9n todos los datos necesarios para describir los objetos creados a partir de la clase. Estos datos se conocen como <strong>atributos, variables o variables de instancia.<\/strong> El t\u00e9rmino atributo se utiliza en an\u00e1lisis y dise\u00f1o orientado a objetos y el t\u00e9rmino variable instancia se suele utilizar en programas orientados a objetos.<\/span><\/p>\n<h2><span style=\"color: #000000;\"><strong>Declaraci\u00f3n de una clase<\/strong><\/span><\/h2>\n<p><span style=\"color: #000000;\">Antes de que un programa pueda crear objetos de cualquier clase, esta debe ser definida. La definici\u00f3n de una clase significa que se debe dar a la misma un nombre, darle nombre a los elementos que almacenan sus datos\u00a0 y describir los m\u00e9todos\u00a0 que realizar\u00e1n las acciones consideradas en los objetos.<\/span><\/p>\n<p><span style=\"color: #000000;\">Las definiciones o especificaciones no son c\u00f3digos de programa ejecutables. Se utilizan para asignar almacenamiento a los valores de los atributos usados por el programa y reconocer los m\u00e9todos que utilizar\u00e1 el programa. Normalmente se sit\u00faan en archivos formando los denominados <strong>packages<\/strong>, utilizando un archivo para varias clases que est\u00e1n relacionadas.<\/span><\/p>\n<h3><strong><span style=\"color: #000000;\">Formato<\/span><\/strong><\/h3>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0class NombreClase{<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 lista de miembros<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0}<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0<strong>NombreClase:<\/strong> Nombre definido por el usuario que identifica a la clase (puede incluir letras, n\u00fameros <\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0y subrayados como cualquier identificador v\u00e1lido).<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0<strong>lista de miembros:<\/strong> m\u00e9todos y datos miembros de la clase.<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Ejemplo<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">Definici\u00f3n de una clase llamada Punto que contiene las coordenadas x e y de un punto en un plano.<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0class Punto {<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 private int x;\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/ coordenada x<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 private int y;\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/ coordenada y<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 public Punto(int x_, int y_) {<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 x = x_;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 y = y_;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 public Punto() {\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/ constructor sin argumentos<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 x = y = 0;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 public int leerX() {\u00a0 \u00a0 \u00a0 \/\/ devuelve el valor de x<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return x;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 public int leerY() {\u00a0 \u00a0 \u00a0 \/\/ devuelve el valor de y<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return y;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 public void fijarX(int valorX) {\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/ establece el valor de x<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 x = valorX;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 public void fijarY(int valorY) {\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/ establece el valor de y<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 y = valorY;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0}<\/span><\/p>\n<p><span style=\"color: #000000;\">Declaraci\u00f3n de la clase Edad.<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0class Edad {<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 private int edadHijo, edadMadre, edadPadre;\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ datos<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 public Edad() {. . .}\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ m\u00e9todo especial: constructor<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 public void iniciar(int h, int e, int p) {. . .}\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/ m\u00e9todos<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 public int leerHijo() {. . .}<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 public int leerMadre() {. . .}<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 public int leerPadre() {. . .}<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0}<\/span><\/p>\n<h2><span style=\"color: #000000;\"><strong>Objetos<\/strong><\/span><\/h2>\n<p><span style=\"color: #000000;\">Una vez que una clase ha sido definida, un programa puede contener una instancia de la clase, denominada <strong>un objeto de la clase<\/strong>. Un objeto se crea con el operador <strong>new<\/strong> aplicado a un constructor de la clase. Un objeto de la clase Punto inicializado a las coordenadas (2,1):<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0new Punto(2,1);<\/span><\/p>\n<p><span style=\"color: #000000;\">El operador new crea el objeto y devuelve una referencia al objeto creado. Esta referencia se asigna a una variable del tipo de la clase. El objeto permanecer\u00e1 vivo siempre que est\u00e9 referenciado por una variable de la clase que es instancia.<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Formato para definir una referencia<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0NombreClase\u00a0 variableReferencia;<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>\u00a0Formato para crear un objeto<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0variableReferencia = new NombreClase(argumentos_constructor);<\/span><\/p>\n<p><span style=\"color: #000000;\">Toda clase tiene uno o m\u00e1s m\u00e9todos, denominados constructores. Para inicializar el objeto cuando es creado, tienen el mismo nombre que el de la clase, no tienen tipo de retorno y pueden estar sobrecargados. En la clase Edad del ejemplo anterior, el constructor no tiene argumentos, se puede crear un objeto:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0Edad edad = new Edad();<\/span><\/p>\n<p><span style=\"color: #000000;\">El operador de acceso a un miembro (.) selecciona un miembro individual de un objeto de la clase. Por ejemplo:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0Punto punto;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0punto = new Punto();<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0punto.fijarX(100);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0System.out.println(\u00abCoordenada de x es: \u00bb + punto.leerX());<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>A recordar<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">El operador punto (.) se utiliza con los nombres de los m\u00e9todos y variables instancia para especificar que son miembros de un objeto.<\/span><\/p>\n<h4><strong><span style=\"color: #000000;\">Ejemplo<\/span><\/strong><\/h4>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0Clase DiaSemana, contiene un m\u00e9todo visualizar()<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0DiaSemana hoy;\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ hoy es una referencia<br \/>\n<\/span>\u00a0 \u00a0 \u00a0<span style=\"color: #000000;\"> \u00a0hoy = new DiaSemana();\u00a0 \u00a0 \/\/ se ha creado un objeto<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0hoy.visualizar();\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/ llama al m\u00e9todo visualizar()<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>El paradigma orientado a objetos naci\u00f3 en 1969 de la mano del doctor noruego Kristin Nygaard, quien intentando escribir un programa de computadora que describiera el movimiento de los barcos a trav\u00e9s de un fiordo, descubri\u00f3 que era muy dif\u00edcil simular las mareas, los movimientos de los barcos y las formas de la l\u00ednea de &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/www.manualjava.net\/?p=3096\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":3099,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[],"_links":{"self":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/3096"}],"collection":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3096"}],"version-history":[{"count":35,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/3096\/revisions"}],"predecessor-version":[{"id":3136,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/3096\/revisions\/3136"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/media\/3099"}],"wp:attachment":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3096"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3096"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3096"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}