viernes, 22 de abril de 2022

Relación entre Interfaz Gráfica y paradigma de programación orientada a objetos.

Relación entre Interfaz Gráfica y paradigma de programación orientada a objetos.

La interfaz gráfica esta compuesta de diversos elementos con los que el usuario puede interactuar, estos le transmiten información desde la aplicación hacia al usuario, e igualmente el usuario puede ingresar información hacia la aplicación de forma controlada permitiendo la debida ejecución del programa. 

Entonces, se puede interpretar que los elementos encontrados dentro de la Interfaz Gráfica de Usuario (GUI por sus siglas en inglés Graphical User Interface) son objetos con funciones específicas, estos objetos pueden ser conceptualizados como cualquier otro objeto dentro de la programación orientada a objetos, por lo tanto estos mismos objetos tendrán métodos y atributos.

Se puede analizar que el diseño de la GUI, emplea el uso de la abstracción y conceptualización de la Programación Orientada a Objetos POO, para así poder representar elementos, que pueden tomar y modificar los atributos de otros objetos del programa, así entonces, una clase Edit Text puede ser el valor a asignar para un atributos específico de un objeto de una clase, y esto se hace por medio de un método que se ejecuta por un Botón, que es a su vez un objeto de la clase Button.

Es por lo tanto que las relaciones entre GUI y POO se pueden tomar, como que la GUI es una forma gráfica de objetos de diferentes clases preconstruidas, que permiten al usuario interactuar con el flujo del programa.

Ventajas del entorno de desarrollo propuesto por Android Studio

 Ventajas encontradas de Android Studio:

1. Editor de diseño que muestra una vista previa de los cambios realizados directamente en el archivo XML:

La principal ventaja es que Android Studio permite ver en tiempo real el diseño realizado y también explorar el código generado mediante el archivo XML. Así el usuario puede editar de forma gráfica la Interfaz Gráfica de Usuario (GUI) a placer, ajustando los elementos de forma sencilla y en caso de ser necesario haciendo ajustes precisos por medio de código empleando la información que reposa dentro del archivo XML.

2. Vista previa en diferentes dispositivos y resoluciones.

El programa tiene la capacidad de poder mostrar como será el diseño previó según el tamaño y resolución de pantalla de diferentes dispositivos compatibles con Android, en caso de que no se encuentre el dispositivo deseado, es posible crear una interfaz personalizada con el tamaño de pantalla y resolución deseados; así mismo es posible configurar este perfil y guardarlo para futuros usos.

3. Permite ejecutar las compilaciones de forma muy rápida, y así poder comprobar en el momento los fallos y mejoras de la aplicación

Android Studio permite que se pueda compilar el programa ya sea empleando un emulador de un dispositivo Android, o empleando un dispositivo móvil conectado al equipo y realizando la depuración mediante USB. Esto permita que se pueda realizar correcciones del programa de forma inmediata y observar los resultados obtenidos.

Almacenamiento y recuperación de información

El código de la actividad es el siguiente:

import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

Integer puntuacion1, puntuacion2;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

SharedPreferences preferencias =
getSharedPreferences("datos", Context.MODE_PRIVATE);
String puntaje1 =
String.valueOf(preferencias.getInt("puntos1", 0));
String puntaje2 =
String.valueOf(preferencias.getInt("puntos2", 0));

}

public void manejar1(View view) {
SharedPreferences preferencias =
getSharedPreferences("datos", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferencias.edit();
puntuacion1 += 1;
editor.putInt("puntos1", puntuacion1);
editor.commit();
}

public void manejar2(View view) {
SharedPreferences preferencias =
getSharedPreferences("datos", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferencias.edit();
puntuacion2 += 1;
editor.putInt("puntos2", puntuacion1);
editor.commit();
}
}

El código anterior se encarga de sumar una cantidad de puntos a las variables Puntos1 y Puntos2, dependiendo del método que se emplee, ya sea manejar1 o manejar2.

Sin lugar a duda la mayor utilidad de la clase Shared Preferences es poder almacenar valores dentro de variables a lo largo del tiempo, sin temer que estos valores vayan a perderse, la persistencia es lo que busca esta clase y donde radica su propósito.


Creación de interfaz gráfica

 El código de la actividad es el siguiente:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text View - Ejemplo"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.168"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.087" />

<EditText
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
android:text="Edit Text - Ejemplo"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.217"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.161" />

<RadioGroup
android:id="@+id/radioGroup"
android:layout_width="315dp"
android:layout_height="100dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.447"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.299">

<RadioButton
android:id="@+id/radioButton3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Radio Button - Ejemplo 1" />

<RadioButton
android:id="@+id/radioButton4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Radio Button - Ejemplo 2" />

<RadioButton
android:id="@+id/radioButton5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Radio Button - Ejemplo 3" />
</RadioGroup>

<CheckBox
android:id="@+id/checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Check Box - Ejemplo 1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.18"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.462" />

<CheckBox
android:id="@+id/checkBox2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Check Box - Ejemplo 2"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.18"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.543" />

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.52"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.645" />

</androidx.constraintlayout.widget.ConstraintLayout

También se declara las variables de la siguiente manera:

package com.example.gui;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

TextView textView;
EditText editText;
RadioButton radioButton1;
RadioButton radioButton2;
RadioButton radioButton3;
CheckBox checkBox1;
CheckBox checkBox2;
Button button;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

textView = (TextView) findViewById(R.id.textView);
editText = (EditText) findViewById(R.id.editText);
radioButton1 = (RadioButton) findViewById(R.id.radioButton1);
radioButton2 = (RadioButton) findViewById(R.id.radioButton2);
radioButton3 = (RadioButton) findViewById(R.id.radioButton3);
checkBox1 = (CheckBox) findViewById(R.id.checkBox1);
checkBox2 = (CheckBox) findViewById(R.id.checkBox2);
button = (Button) findViewById(R.id.button);

}

}

El resultado del código es el anterior:


La interfaz gráfica y sus elementos asociados son importantes puesto que facilitan la interacción del usuario con el código programado, son una mecanismo sencillo para transmitir información al usuario, así como permitirle al mismo transmitir información a la aplicación de una manera controlada y con ciertas restricciones que permitan el adecuado funcionamiento del programa.

Tipos de estructuras repetitivas de programación.

El código de la actividad es el siguiente:

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.TextView;
import org.w3c.dom.Text;

public class MainActivity extends AppCompatActivity {

int numero;
TextView tvResultado, tvResultado2, tvResultado3;
String salida;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

numero = 0;
salida = "";
tvResultado = (TextView) findViewById(R.id.tvResultado);
tvResultado2 = (TextView) findViewById(R.id.tvResultado2);
tvResultado3 = (TextView) findViewById(R.id.tvResultado3);

while (numero<=20) {
numero += 1;
String cadena1 = String.valueOf(numero);
salida = salida + " " + cadena1;
}
tvResultado.setText(salida);

salida = "";

for (int i = 0; i < 16; i += 2){
String cadena2 = String.valueOf(i);
salida = cadena2 + "-";
}
tvResultado2.setText(salida);

salida = "";
numero = 0;

do{
numero += 1;
String cadena1 = String.valueOf(numero);
salida = salida + " " + cadena1;
}while (numero <= 15);
tvResultado3.setText(salida);

}
}

Las estructuras repetitivas son parte fundamental de casi cualquier programa, puesto que son importantes para recorrer vectores, realizar tareas repetitivas, iterar procesos y similares. Las estructuras permiten automatizar recorridos y son un sinónimo de automatización de cualquier proceso.