Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - MonkeyBoy

#1
Gracias! No tienes permitido ver los links. Registrarse o Entrar a mi cuenta esta es la app que les comento.

Estoy buscando info para decompilar, pero si tienen algunos recursos para compartir les agradezco.
#2
Hola! como estan?

Estoy realizando una app y me seria super util poder obtener un poco de inspiración sobre otras app que realizan servicios similares. Y se me ocurría la posibilidad de poder ver el código fuente de las mismas, pero, es esto posible?

Gracias!
#3
Hola! Aca estoy una vez mas con una consulta de JS para finalizar una tarea.

Como estoy quemado, creo que me falta un detalle sencillo pero no lo termino de ver.

Les dejo aca mi consulta.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Muchas gracias!
#4
Hola! necesito ayuda con un tema en Jquery que no tengo muy claro.

Tengo en un link que me envia a /stock/products/ con el filtro de la categoría aplicado.

Código: php
<a href="/stock/products/?categoryId=<?php echo $categoryId; ?>" class="ViewProducts" id="view" ><?php echo __("Ver productos"); ?></a>


Y necesito saber como realizar lo siguiente:

Al hacer click en "Ver productos" me redirecciona a la pagina de general de productos pero, como hacer para que me redireccione a la url de solo los productos de la categoria donde realice el click? como realizar esa function?

aqui esta la misma consulta pero con una imagen de la pantalla donde está el boton de "ver productos" No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Espero se entienda. Gracias!






#5
Bienvenido WeedTrip!

Que bueno tenerte por acá!

#6
Java / Re:[CURSO] Programación orientada a objetos
Octubre 16, 2018, 05:17:51 PM
Sintaxis de Java

Tipos de datos
En Java, los tipos de datos se pueden dividir en dos categorías:

los primitivos, que son aquellos tipos de datos que provee el compilador y
los abstractos, que son los creados por el programador.

A continuación te detallamos los tipos de datos primitivos que posee Java:





Habrás notado que todos los tipos de datos primitivos en Java se escriben en minúsculas. Esto se debe a que el lenguaje es "Case sensitive" (sensible a mayúsculas), lo que significa que el lenguaje hace diferencias entre mayúsculas y minúsculas, es decir, que no es lo mismo int que Int o inT.


Ahora te explico con más detalle cada uno de los tipos de datos.

Datos Lógicos:

Son variables que pueden almacenar dos tipos de valores true o false (verdadero o false). Por lo general los utilizarás para almacenar resultados de evaluaciones lógicas.

Datos Textuales:

Son variables en las cuales se almacenan caracteres. Al asignar sus valores, deben encerrarse entre apóstrofes ("'"). Los usarás para almacenar caracteres simples.

Datos Integrales:


Son variables en las cuales se almacenan valores numéricos de tipo entero con signo (+/-). Dentro de ellas podrás almacenar valores en cualquiera de las siguientes formas:

Decimal: los literales decimales aparecen como números ordinarios sin ninguna notación especial.
Hexadecimal: los hexadecimales (base 16) aparecen con un 0x ó 0X inicial, notación similar a la utilizada en C y C++.
Octal: los octales aparecen con un 0 inicial delante de los dígitos.
Por ejemplo, un literal entero para el número decimal 12 se representa en Java como 12 en decimal, como 0xC en hexadecimal, y como 014 en octal.


En Java, la definición de una variable es muy sencilla, primero se declara el tipo y luego el nombre de la misma.

Ejemplo:

int numero;

Cada definición de variables se termina con un punto y coma (";"). En caso de querer definir más de una variable del mismo tipo se utiliza la coma (",") como separador


int numero, exponente, base;


También se puede dar un valor inicial a las variables en el momento de definirlas:


int numero, exponente = 1;



Operador de asignación
Dentro de los operadores podemos encontrar cinco diferentes tipos, los cuales te detallamos a continuación:



1. Operador de asignación
El operador de asignación es el signo igual "=". Mediante este operador podrás asignar valores a las variables.


2. Operadores matemáticos: Binarios

Son los operadores que te permiten realizar operaciones matemáticas.
Dentro de este grupo existen dos tipos de operadores matemáticos: los binarios y los unarios.




El tipo de los datos devueltos por una operación aritmética depende del tipo de sus operandos. Por ejemplo, si se suman dos enteros, se obtiene un entero como tipo devuelto, con el valor de la suma de los dos enteros.


Estos operadores los debés utilizar con operandos del mismo tipo, o si no, realizar una conversión de tipos de uno de los dos operandos al tipo del otro.

Cada uno de los operadores que te muestro en la tabla anterior tiene a su vez una forma abreviada a utilizar conjuntamente con el operador de asignación. A continuación los describo y te muestro sus equivalentes.





3. Operadores relacionales

También llamados operadores de comparación. A estos operadores los utilizarás al momento de evaluar condiciones lógicas.

En la siguiente tabla te detallo los operadores que existen y sus significados:





4. Operadores lógicos
Estos operadores sirven para realizar condiciones compuestas de tipo lógico. También se los llama conectores lógicos.

Veamos cuáles son y sus correspondientes tablas de verdad asociadas.

Código: php
(A > 0) && (B > 0)
// Será true cuando A sea mayor a 0 y también B sea mayor a 0

(A > 0) || (B > 0)
// Será true cuando A sea mayor a 0 o cuando B sea mayor a 0








5. Operadores de bits

Son los operadores que se utilizan a nivel BIT (comparaciones entre ceros y unos). Esos operadores se utilizan para expresiones avanzadas





Hasta el próximo capitulo!
#7
Dudas y pedidos generales / No reconoce dispositivo NFC
Septiembre 20, 2018, 04:34:41 PM
Hola a tod@s!

Siguiendo uno de los tutoriales del foro para sobreescribir tarjetas mifare classic 1k me encuentro con los siguientes problemas previos a conectar el lector. De todas maneras,aunque claramente, al conectar el lector y poner nfc-list me indica que No encuentra el dispositivo NFC.

Utilizo:

Lector RFID-NFC PN532
cable-adaptador USB a UART


conectado tal cual la imagen que les adjunto tambien

Esto es lo que estoy escribiendo en la terminal y en los ultimo items les pongo en negrita los errores que arrojan.
Claramente continué a pesar de los errores previos para que puedan ver todos los errores. (Bien a lo bruto)

Desde ya les pido disculpas por mi ignorancia en algunos temas que seguramente sean sencillos de resolver, pero acudo a ustedes para seguir aprendiendo y avanzando!












Muchas gracias!
#8
Tema resuelto y con post incluido de aporte de como lo solucioné @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Muchas gracias!
#9
Muchas gracias @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta !

Me tomo muy en serio este foro y espero ir devolviendole todo lo que me da.

Gracias!
#10
INSTALACIÓN Y SOLUCIÓN A PROBLEMAS / KALILINUX EN VIRTUALBOX

En esta ocasión voy a realizar un aporte basado en todos los problemas que me surgieron a mi al querer instalar Kali en VirtualBox
unido a el paso a paso de la instalación desde 0 de todo.


Sistema: Windows 10 Home 64Bits
Programa: Oracle VM VirtualBox Machine
Imagen a instalar: KaliLinux 64Bits

1 - Descargamos VirtualBox desde No tienes permitido ver los links. Registrarse o Entrar a mi cuenta




2 - Descargamos Extension Pack que se encuentra al final de la pagina debajo de todo.



3 - Instalamos la VirtualBox y la iniciamos y nos aparece esto (Sin la maquina Monkey XD)



4 - Entramos a la Web oficial de Kali No tienes permitido ver los links. Registrarse o Entrar a mi cuenta   y en la sección Downloads elegimos la imagen que queremos instalar, en mi caso descargue Kali de 64Bits y HTTP para descargarlo en formato .ISO 




5 - Volvemos a nuestra VirtualBox y hacemos click en NEW y nos aparece esta ventana, en donde elegimos el sistema operativo Linux, y la version (En mi caso Debian 64Bits) Los 64Bits claramente porque debe coincidir con la ISO descargada y elegimos la Memory Size, el nombre de nuestra VM.
Lo demas lo dejamos todo asi como se ve en la imagen y le damos a Create.




6 - Al darle Create, nos lleva a esta ventana,en File Size podemos poner unos 32GB y dejamos todo tal cual la imagen




7 - y ya nos aparece nuestra VM




8 - Seleccionada nuestra VM Foro, hacemos click en Settings

En las solapas:
General - System - Display - Audio - Serial ports - USB - Shared folders - Use interface

Dejamos todo como está!

Pero en la solapa:

Network tenemos que ponerlo en Modo Bridge o Puente y nos quedará algo como esto.




9 - Seleccionada nuestra VM Foro, le damos Start y se iniciará.
Nos pide que carguemos nuestra imagen .ISO que anteriormente habiamos descargado y una vez cargada inicia y se ejecuta el proceso de instalación del sistema.



Pueden encontrar como seguir el proceso de instalación de Kali en VirtualBox ya configurada acá No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


Ahora bien, esa seria la parte ideal de que nos haya funcionado paso a paso la instalación y ahora les quiero comentar algunos detalles a tener en cuenta antes de encontrarnos con varios problemas como:


  • Instalar VirtualBox y que solo nos de la opción de cargar imagenes de 32Bits
  • Realizar todo el proceso anterior y al cargar la ISO nos tire un error como VTX is not available
  • Errores varios relacionados a HyperV
  • Aún con HyperV desactivado seguir teniendo el mismo error
  • Aún con la virtualización activada en la Bios, seguir sin poder iniciar nuestra VM

Y así muchas cosas que pueden enloquecerte XD


A - Entrar a la Bios, ya sea desde cuando prendes la computadora y le das F2/F12 varios segundos (En algunas difiere el F que hay que presionar por eso pongo dos opciones de las basicas) o en Windows 10 por ejemplo tenemos la opcion de ir a Settings
- Update & Security



Recovery - Restart Now y los envía directo a la BIOS.



Donde tienen que activar o chequear que este activado lo siguiente:

Seguridad - Seguridad del sistema - VTX/VTD (Enabled o Habilitado)

Avanzado - Opc de dispositivos (Todo Enabled o Habilitado)


Guardar cambios y salir!


B -  Dentro ya de Windows buscar Turn Windows features on or off y chequear que HyperV, ya sea un solo item o varios, este destildado, como en la imagen.




C - Nuevamente ingresamos a Settings - Update & Recovery - For developers y activar el modo para desarrolladores.




D - Y este fue el gran problema que me surgio a mi (Raro) pero luego de esto pude configurar toda la VM sin problema, me aparecian ambas opciones de imagen (32 y 64Bits) y no arrojaba ningun error y fue en :

Settings - Update & Recovery - Windows Security - Device security -



Dentro de Device security tocamos donde dice Core Isolation details y desactivamos memory integrity tal cual la imagen.




Asi que bueno,esto fue todo en este aporte que espero sea de ayuda en la instalación en orden y en solucion de errores.

Espero haber sido claro para poder aportar algo que me costó encontrar de esta manera en internet.

Cualquier consulta o modificación y aporte, estoy a disposición!

MonkeyBoy
#11
Java / Re:[CURSO] Programación orientada a objetos
Septiembre 13, 2018, 04:29:44 PM
Polimorfismo

¿Qué es el polimorfismo?

Comenzamos y lo primero que me propongo es explicarte qué es el concepto de polimorfismo. Veremos, entonces, los conceptos básicos de esta propiedad.
Además, te cuento qué es una Interface y cómo se implementa. 


Comencemos...



¿Qué es el polimorfismo?


Seguramente, te estarás preguntando qué es este concepto de polimorfismo. Esta palabra está relacionada con la idea de tener muchas formas. Si consultamos el diccionario de la Real Academia Española, nos dirá que una de las acepciones de polimorfismo es

"Cualidad de lo que tiene o puede tener distintas formas"


Ahora bien, ¿qué tiene que ver esto con la Programación a Objetos?

Te lo cuento con un simple ejemplo.

Volvamos a la actividad que te planteo en capitulos anteriores, en donde definimos una jerarquía de clases con la clase Vehículo como base y las clases Avión y Auto como clases derivadas.

Un método de la clase Vehículo es arrancar(). Esto significa que todos los objetos vehículos podrán arrancar.

Pero,¿como lo haran?

La implementación de este método no podrá definirse en la clase Vehículo, ya que todos los vehículos no tienen la misma forma de arrancar.


Un avión tendrá una manera de arrancar distinta a la de un auto, por ejemplo en el auto habrá que colocar una llave y girarla.

Por lo tanto, en cada clase derivada se deberá implementar el método arrancar.

¿Entonces? ¿Qué tiene que ver todo esto con el polimorfismo?
¿Cómo funciona el polimorfismo?


Ahora es donde aparece la magia del polimorfismo, ya que podremos tener en nuestro programa un objeto que sea un Vehículo, sin importar a qué clase derivada pertenezca, e invocar al método arrancar. El objeto por ser un vehículo tiene el método arrancar, y este objeto podrá ser un Avión o un Auto, y se resolverá en el momento de la ejecución a qué método se invoca (si al del Auto o al del Avión).

De esta manera, en la POO, se denomina polimorfismo a la capacidad que tiene un objeto de responder al mismo mensaje que se encuentra en distintas clases.




Polimorfismos, sobrecarga y sobre escritura
Una de las características del polimorfismo es que no se habla de sobrecarga de métodos, sino de sobre escritura.



Veamos, ahora, la definición de cada concepto.

La sobrecarga se produce dentro de una misma clase sobre un método que tiene igual nombre, pero distintos parámetros. Dependiendo de los parámetros que se encuentren en la invocación será el método que se termine llamando.

La sobre escritura se produce con métodos de distintas clases, donde se encuentra definido un método con el mismo nombre y con los mismos parámetros. Dependiendo del objeto que invoque al método será la clase que resolverá ese llamado.


Clases abstractas

El polimorfismo es la habilidad que tiene un objeto de tomar diferentes formas en tiempo de ejecución. Nosotros vamos a representar el polimorfismo con la palabra reservada "abstracto", la cual puede ser utilizada tanto en clases como en métodos.

Es importante que entiendas, también, que para que exista polimorfismo tiene que haber una jerarquía de clases.



Si un método tiene antepuesto a su definición la palabra "abstracto", entonces decimos que es un método abstracto, es decir que su cabecera se encuentra en la clase base y su implementación se encuentra en alguna clase derivada.

Una clase que posee, al menos, un método abstracto se denomina clase abstracta.

Una clase abstracta, por lo tanto, tendrá que derivarse, ya que no podrá hacerse un nuevo objeto de esa clase abstracta.


Ejemplo 1 de polimorfismo
  Veamos cómo implementamos nuestro ejemplo de polimorfismo en pseudocódigo.

Código: php
[i]


SEUDOCÓDIGO
Abstracto CLASE Persona
Atributos
    NOMBRE : CADENA
    EDAD : ENTERO
Métodos
    Persona ()
    EsMayor():BOOLEAN
    GetNombre():CADENA
    Abstracto presentarse()

Implementación
    PROCEDIMIENTO Obtener ()
    INICIO
        Mostrar ("Ingrese nombre")
        Ingresar (NOMBRE)
        Repetir
            Mostrar ("Ingrese edad")
            Ingresar (EDAD)
        Hasta que EDAD > 0
    FIN
   
    FUNCIÓN EsMayor (): Boolean
    VARIABLES
        ES : BOOLEAN
    INICIO
        ES <- FALSO
        Si EDAD > 18 entonces
            ES <- VERDADERO
        Finsi
        Devolver ES
    FINFUNCIÓN

    FUNCIÓN GetNombre (): Boolean
    INICIO
        Devolver NOMBRE
    FINFUNCIÓN
FINCLASE


CLASE Alumno extiende de Persona
Atributos
    MATRICULA : CADENA
Métodos
    Obtener ()
    GetMatricula():CADENA
    SetMatricula(MAT:CADENA)

Implementación
    PROCEDIMIENTO
    INICIO
        Super.Obtener()
        Mostrar ("Ingrese matrícula")
        Ingresar (MATRICULA)
    FIN

    FUNCIÓN GetMatricula (): CADENA
    INICIO
        Devolver MATRICULA
    FINFUNCIÓN

    PROCEDIMIENTO SetMatricula (MAT: CADENA)
    INICIO
        MATRICULA <- MAT
    FIN
   
    PROCEDIMIENTO Presentarse ()
    INICIO
        Mostrar ("Soy el alumno " NOMBRE)
        Mostrar ("Mi matrícula es " MATRICULA)
    FIN
FINCLASE


CLASE Docente extiende de Persona
Atributos
    LEGAJO : CADENA
Métodos
    Obtener ()
    GetLegajo():CADENA
    SetLegajo(MAT:CADENA)

Implementación
    PROCEDIMIENTO Obtener ()
    INICIO
        Super.Obtener()
        Mostrar ("Ingrese legajo")
        Ingresar (LEGAJO)
    FIN
   
    FUNCIÓN GetLegajo (): CADENA
    INICIO
        Devolver LEGAJO
    FINFUNCIÓN

    PROCEDIMIENTO SetLegajo (MAT: CADENA)
    INICIO
        LEGAJO <- MAT
    FIN

    PROCEDIMIENTO presentarse ()
    INICIO
        Mostrar ("Soy el docente " NOMBRE)
        Mostrar ("mi legajo es " LEGAJO)
    FIN
FINCLASE

VARIABLES
    Pers = Persona
INICIO
    Pers = nuevo Alumno()
    Pers.presentarse()
    Pers = nuevo Docente ()
    Pers.presentarse()
FIN[/i]





A la jerarquía original le agregamos la clase Docente, derivada de Persona para que quede más claro cómo funciona el polimorfismo.

Habrás notado que la clase Persona, ahora es una clase abstracta, ya que tiene un nuevo método que es abstracto, denominado presentarse.

Esto significa que cada persona se podrá presentar, pero en nuestro programa, las personas serán alumnos o docentes. Es decir que los objetos serán instancias de las clases Alumno o Docente, no tendremos objetos de Personas.

Ahora bien, cada uno de los objetos se podrá presentar. Un alumno se presentará con su matrícula, mientras que un docente lo realizará con su legajo. Por lo tanto ante el mismo mensaje, las clases responderán con acciones diferentes.

Aquí es donde tenemos que utilizar el polimorfismo para simplificar el desarrollo.

Para eso, definimos un objeto que será Persona, llamado Pers. Este es el objeto polimórfico, ya que en principio será un Alumno y luego lo instanciaremos como un Docente.

Seguramente te habrás dado cuenta que estamos realizando la misma llamada

Pers.presentarse()


Ese es el momento en que dinámicamente, en tiempo de ejecución, se resuelve a qué clase se estará invocando.

En la primera llamada se invocará al método presentarse de la clase Alumno, ya que Pers es un Alumno.
En la segunda llamada se invocará al método presentarse de la clase Docente, ya que Pers es un Docente


De esta manera es como, ante el mismo llamado del mismo objeto, puede responder de manera distinta ya que el objeto Pers es polimórfico.

Hasta el proximo capitulo!



#12
Dudas y pedidos generales / Re:error de red
Septiembre 09, 2018, 09:01:11 PM
Hola Manuelsq quiza es sencillo lo que aporto,pero, probaste en desactivar el antivirus? o te fijaste en los permisos?

Conocí un caso que no le cargaban las paginas http por un tema de permisos de Avast.

Sino quizá también fijándote en la configuración de red / DHCP /

o chequear la configuración del adaptador o alguna concesión desactivada, IP fija o etc jaja

espero alguna te lleve a la solución

Saludos
#13
Muchas gracias Anonima

Voy a probar con Vmware y les comento aqui mismo.

#14
Diseño UX/UI / Re:Pidan Firmas Gratis
Septiembre 04, 2018, 11:34:25 AM
Hola! Muchas gracias por tu disposición. Me vendria muy bien tener la firma personalizada.

Saludos!
#15
Hola!

Tengo un problema con VirtualBox.

Creo la maquina virtual paso a paso en el settings, y cuando la inicio y me pide cargar la imagen, me tira errores.

No importa con cual imagen (Kali o Kali Light)

Ya desactive Hyper - V por cmd y en turn windows features on or off

Ya habilite en la Bios lo de la virtualización

Hasta revise si mi procesador era apto pero si lo es.


Y ahora con una nueva imagen de Kali light 32Bits me tira este error.



Que mas puede ser? Que esta pasando?



Muchas gracias!

#16
Muchas gracias N0SS4

Muy claro todo! Gracias!
#17
Como bien dice Flamer tienen varios fallos en su pagina.

Aqui un XSS que modifica el valor en cualquiera de los metodos de pago, y como si fuera poco,sobre el curso de seguridad web jaja



#18
Java / Re:[CURSO] Programación orientada a objetos
Agosto 29, 2018, 05:15:01 PM
Algoritmo de la composición


En nuestro algoritmo, a la clase Persona la definiremos así:

Código: php
SEUDOCÓDIGO
CLASE Persona
Atributos
     NOMBRE : CADENA
     EDAD : ENTERO
     DOM : objeto Domicilio
Métodos
     Persona ()
     EsMayor(): BOOLEAN
     GetNombre(): CADENA
FINCLASE

CLASE Domicilio
Atributos
     CALLE : CADENA
     PISO : ENTERO
     DEPARTAMENTO : CADENA
     LOCALIDAD : CADENA
     PROVINCIA : CADENA
Métodos
     Domicilio ()
     Obtener()
     Mostrar()
FINCLASE


Si observamos el código tenemos dos clases: Clase Domicilio que es solo una clase que contiene los atributos propios de un domicilio, y la Clase Persona que contiene sus propios atributos como Persona además de un objeto de la Clase Domicilio.

La inclusión de este objeto hace que haya composición, o sea que la Clase Persona está compuesta por la clase Domicilio. A diferencia de la herencia, ahora, si querés acceder a los datos de la Clase Domicilio lo debés hacer mediante el objeto, invocando sus métodos.



Luego de haber analizado este ejemplo podemos decir que:


Existe composición cuando una clase está compuesta por un objeto de otra clase. En este caso, el rol de la relación es "tiene un" o "está compuesto por".

En la composición no se habla ni de clase base ni de derivada.



Herencias vs. Composición


Seguramente te estarás preguntando:

¿En qué situación utilizar le herencia o la composición?



Te comentamos nuestras conclusiones para ayudarte a tomar esa decisión.

Las dos técnicas fundamentales para construir nuevas clases a partir de otras ya existentes son la herencia y la composición. Es importante que entiendas que ambos tipos de relaciones pueden existir al mismo tiempo en un problema en donde hay varias clases y diversos tipos de relaciones.


Sintetizando....

La herencia permite construir una clase derivada a partir de una clase base. La clase derivada hereda todas las propiedades de la clase base, es decir, sus atributos (datos), y su comportamiento (métodos). Todas las nuevas características que quieras dar a la clase derivada se las tendrás que brindar por medio de nuevos atributos y métodos.

La composición de clases es un concepto distinto al de la herencia, ya que expresa el hecho de que se pueden componer o constituir clases nuevas a partir de objetos de otras clases. Esto lo podés notar en el mundo real, en donde podés observar objetos formados por otros objetos: por ejemplo, computadoras formadas por teclado y pantalla; vehículos formados por motor, transmisión y chasis, etc.
En ambas técnicas, el código de las clases originales o clases bases no presenta ningún tipo de modificación.


La cláusula final
A veces tenemos la necesidad de evitar que una clase sea derivada o bien un método sea implementado en otra clase derivada.

Por ejemplo, pensemos en una clase que define un método AumentarSueldo. Sería lógico que ninguna otra clase pueda implementarla, por lo tanto, necesitaremos indicar de alguna manera que ese método solamente será definido por la propia clase. Para eso, la POO, tiene la característica de las clases o métodos finales.

Veamos el siguiente ejemplo:


Código: php
SEUDOCÓDIGO
CLASE Empleado
     Publico Final AumentarSueldo()
FINCLASE

Final CLASE Ejecutivo extiende Empleado
FINCLASE


En este ejemplo, la clase Ejecutivo, clase derivada de Empleado no podría reescribir el método aumentarSueldo, y por tanto cambiar su comportamiento, ya que este método está definido como final en la clase Empleado.
Por lo tanto, solamente será implementado en la misma clase Empleado.

Por otro lado, evitamos que se pueda seguir extendiendo el árbol jerárquico, es decir, que la Clase Ejecutivo no puede derivarse. Esto se debe a que la clase Ejecutivo la definimos como clase final.
#19
Java / Re:[CURSO] Programación orientada a objetos
Agosto 29, 2018, 04:25:20 PM
Tipo de herencia: 1- Herencia Simple


Capitulo 4

En la POO existen dos tipos de herencia.

1- Herencia Simple


Como habrás notado, la clase Alumno de nuestro ejemplo anterior hereda de una sola clase. Este es el caso de una herencia Simple.

En este tipo de herencia, una clase puede extender las características de una sola clase, o sea sólo puede tener un padre.


2- Herencia Múltiple


Hay otro tipo de herencia y es en el caso en que una clase puede extender las características de varias clases, es decir, puede tener varios padres. En este aspecto hay discrepancias entre los diseñadores de lenguajes. Algunos de ellos han preferido no admitir la herencia múltiple por las posibles coincidencias en nombres de métodos o datos miembros.

Si una clase cualquiera tiene más de una superclase directa en la jerarquía de clases, se considera que existe herencia múltiple.

En términos concretos, una instancia de objeto de la clase hija poseerá todos los atributos y métodos de sus clases padres.

Especificadores de alcance


Ahora vuelvo a comentarte sobre los especificadores de alcance que hablamos en capítulos anteriores.

En el caso de la herencia, utilizamos los mismos especificadores que se utilizan para definir una clase, método o atributo; la única diferencia es el alcance que tienen en la clase derivada. Esto quiere decir que dependiendo del tipo de acceso que se especifique al componente en la clase base, será cómo se lo pueda utilizar en las clases derivadas.

En la siguiente tabla especificamos el alcance en la clase derivada según el alcance que tenga el componente en la clase base.


CLASE BASE   CLASE DERIVADA   ACCESO
Privado   Privado   Solo mediante métodos
Protegido   Público   Directo
Público   Público   Directo



Que indica entonces esta tabla?

• Que, si los datos en la clase base son privados, en la clase derivada también lo serán y que su acceso sólo será mediante los métodos

• Que, si los datos en la clase base son protegidos, en la clase derivada se convierten en públicos y que su acceso sólo será directo, o sea, no hará falta acceder mediante la invocación de ningún método.

• Que si los datos en la clase base son públicos en la clase derivada también lo serán y que su acceso sólo será directo, o sea, no hará falta acceder mediante la invocación de ningún método.


Como habrás notado, entonces, no es necesario, si vas a tener un esquema de herencia, poner en la clase base los atributos de la misma como privados, sino que los podés poner como atributos protegidos.

Que caracteristicas tienen en caso de ser protegidos?

Una es la que nombramos antes: que en la clase derivada tienen una visibilidad pública, pero en la clase base un atributo protegido es igual que un atributo privado, o sea que no puede ser accedido más que a través de métodos, es decir, que no se pierde el ocultamiento de la información en la clase base.


Composición


Ahora te presento otro tipo de relación que se puede establecer entre Clases, y para eso te propongo agregar a nuestro modelo de clases la información del domicilio de una persona.
Podemos modelar el domicilio como una clase, por lo tanto, tendríamos la siguiente definición de clase.
Para simplificar el ejemplo, definiremos solamente los métodos para mostrar y para obtener el domicilio.

Código: php
CLASE DOMICILIO
CLASE Domicilio

Atributos
   Calle : cadena
   Piso : entero
   Departamento : cadena
   Localidad : cadena
   Provincia : cadena

Métodos
   Domicilio ( )
   Obtener ( )
   Mostrar ( )
 


Ahora bien...

Como se relaciona el domicilio con la persona?

Una Persona NO es un Domicilio, tampoco un Domicilio es una Persona. Por lo tanto, no podemos definir una relación de herencia, tendremos que buscar algún otro tipo de relación.
Podemos decir que una Persona está compuesta por un Domicilio, ya que de los atributos de Persona (nombre y edad), además tenemos el domicilio. De esta manera podemos agregar el domicilio a la persona

Eso es todo por ahora. Seguimos en el proximo capitulo.



#20
Hola!

Queria pedirles ayuda con estos enunciados para escribir en Java.

Hay algo que estoy poniendo que no los corre bien.

Enunciados:

Suponga un array que contiene N notas de 0 a 10 generados
aleatoriamente y mostradas en pantalla, de acuerdo a la nota
contenida, indicar cuántos estudiantes perteneces al grupo:
 Bajo de conocimientos de 0-4
 Regulares de mayor de 4 hasta 5
 Buenos mayor a 5 hasta 7
 Muy buenos mayor de 7 a 9
 Excelentes mayor a 9

Aca en Java lo que fui armando (No terminado y no bien colocado los n°) es la base

Código: php
import java.io.*;

public class algoritmo4 {

public static void main(String args[]) throws IOException {
BufferedReader bufEntrada = new BufferedReader(new InputStreamReader(System.in));
double contadores[];
int i;
int numeros_aleatorios[];
int tamanio;
// Pedimos el tamaño del arreglo
System.out.println("Escribe un numero para el tamaño del arreglo");
tamanio = Integer.parseInt(bufEntrada.readLine());
// Creamos los arreglos
numeros_aleatorios = new int[tamanio];
contadores = new double[4];
// Recooremos el arreglo
for (i=0;i<=tamanio-1;i++) {
numeros_aleatorios[i-1] = aleatorio(0,10);
System.out.println(numeros_aleatorios[i-1]);
// Segun el valor, añadimos uno mas al arreglo
if (numeros_aleatorios[i-1]>=0 && numeros_aleatorios[i-1]<=5) {
contadores[-1] = contadores[-1]+1;
} else {
if (numeros_aleatorios[i-1]>=6 && numeros_aleatorios[i-1]<=10) {
contadores[0] = contadores[0]+1;
} else {
if (numeros_aleatorios[i-1]>=11 && numeros_aleatorios[i-1]<=15) {
contadores[1] = contadores[1]+1;
} else {
if (numeros_aleatorios[i-1]>=16 && numeros_aleatorios[i-1]<=20) {
contadores[2] = contadores[2]+1;
}
}
}
}
}
// Mostramos los valores
for (i=0;i<=3;i++) {
switch (i) {
case 0:
System.out.println("Deficientes (0-5): "+contadores[i-1]);
break;
case 1:
System.out.println("Regulares (6-10): "+contadores[i-1]);
break;
case 2:
System.out.println("Buenos (11-15): "+contadores[i-1]);
break;
case 3:
System.out.println("Excelentes (16-20): "+contadores[i-1]);
break;
}
}
}


}




siguiente enunciado:


Realizar un algoritmo con el siguiente proceso:
1. Llenar Vector A de manera aleatoria.
2. Llenar Vector B de manera aleatoria.
3. Realizar C=A+B
4. Realizar D=B-A
5. Mostrar por pantalla los contenidos de los dos Vectores A, B, y los
totales de C y D.
6. Salir.

Código: php
import java.io.*;

public class ejercicio_arreglos_6 {

public static void main(String args[]) throws IOException {
BufferedReader bufEntrada = new BufferedReader(new InputStreamReader(System.in));
String a[];
boolean arreglo_a_rellenado;
boolean arreglo_b_rellenado;
String b[];
String c[];
double forma_1;
double forma_2;
int longitud_arreglos;
double maximo;
double minimo;
int opcion_menu;
int opcion_submenu;
boolean salir;
boolean salir_submenu;
// Constantes usadas
minimo = -100;
maximo = 100;
forma_1 = 1;
forma_2 = 2;
// Pedimos la longitud de los arreglos
System.out.println("Escribe una longitud");
longitud_arreglos = Integer.parseInt(bufEntrada.readLine());
// Dimensiones de los arreglos
a = new String[longitud_arreglos];
b = new String[longitud_arreglos];
c = new String[longitud_arreglos];
arreglo_a_rellenado = false;
arreglo_b_rellenado = false;
opcion_menu = 0;
do {
// Menu
System.out.println("1. Llenar Vector A de forma aleatoria");
System.out.println("2. Llenar Vector B de forma aleatoria");
System.out.println("3. Realizar C = A + B");
System.out.println("4. Realizar C = B - A");
System.out.println("5. Mostrar arreglo");
System.out.println("6. Salir");
// elijo una opcion del menu
System.out.println("Elige una opcion");
opcion_menu = Integer.parseInt(bufEntrada.readLine());
salir = false;
switch (opcion_menu) {
case 1:
// relleno el arreglo A
llenararreglo(a,longitud_arreglos,minimo,maximo);
arreglo_a_rellenado = true;
System.out.println("el arreglo A ha sido rellenado");
break;
case 2:
// relleno el arreglo B
llenararreglo(b,longitud_arreglos,minimo,maximo);
arreglo_b_rellenado = true;
System.out.println("el arreglo B ha sido rellenado");
break;
case 3:
if (arreglo_a_rellenado && arreglo_b_rellenado) {
// relleno el arreglo C
rellenarc(a,b,c,longitud_arreglos,forma_1);
System.out.println("el arreglo C ha sido rellenado");
} else {
if (!arreglo_a_rellenado) {
System.out.println("Tienes que rellenar el arreglo A");
}
if (!arreglo_b_rellenado) {
System.out.println("Tienes que rellenar el arreglo B");
}
}
break;
case 4:
if (arreglo_a_rellenado && arreglo_b_rellenado) {
// relleno el arreglo C
rellenarc(a,b,c,longitud_arreglos,forma_2);
System.out.println("el arreglo C ha sido rellenado");
} else {
if (!arreglo_a_rellenado) {
System.out.println("Tienes que rellenar el arreglo A");
}
if (!arreglo_b_rellenado) {
System.out.println("Tienes que rellenar el arreglo B");
}
}
break;
case 5:
// Submenu
opcion_submenu = 0;
do {
System.out.println("Escribe que arreglo quieres mostrar");
System.out.println("1. A");
System.out.println("2. B");
System.out.println("3. C");
System.out.println("4. Salir");
opcion_submenu = Integer.parseInt(bufEntrada.readLine());
salir_submenu = false;
// mostrar arreglos
switch (opcion_submenu) {
case 1:
mostrararreglo(a,longitud_arreglos);
break;
case 2:
mostrararreglo(b,longitud_arreglos);
break;
case 3:
mostrararreglo(c,longitud_arreglos);
break;
case 4:
salir_submenu = true;
break;
default:
System.out.println("Elige alguna de las opciones");
}
} while (!salir_submenu);
break;
case 6:
salir = true;
break;
default:
System.out.println("Escribe una opcion entre 1 y 6");
}
} while (!salir);
}

// rellena el arreglo
public static void llenararreglo(int arreglo[], double longitud_arreglos, int min, int max) {
double i;
for (i=0;i<=longitud_arreglos-1;i++) {
arreglo[i-1] = aleatorio(min,max);
}
}

// Muestra un arreglo concreto
public static void mostrararreglo(String arreglo[], double longitud_arreglos) {
double i;
for (i=0;i<=longitud_arreglos-1;i++) {
System.out.print(arreglo[i-1]+" ");
}
System.out.println("");
}

// Rellena el arreglo C
public static void rellenarc(double arregloa[], double arreglob[], double arregloc[], double longitud_arreglos, double tipo) {
int i;
if (tipo==1) {
// punto 3
for (i=0;i<=longitud_arreglos-1;i++) {
arregloc[i-1] = arregloa[i-1]+arreglob[i-1];
}
} else {
// punto 4
for (i=0;i<=longitud_arreglos-1;i++) {
arregloc[i-1] = arreglob[i-1]-arregloa[i-1];
}
}
}


}






Muchas gracias por su ayuda!