Saltar al contenido

Uso de objetos y métodos

AP Ciencias de la Computación A · Tema 1

Entrenar
Lección de video para este tema Abrir la página de video
15:05

Uso de objetos y métodos

Aquí hay dos programas Java. El primero falta un punto y coma. El segundo divide siete entre dos y almacena la respuesta en un número entero. El compilador detiene el…

Narración en inglés · Subtítulos en inglés + 中文 quemados en pantalla

1.1

Introducción a los Algoritmos, la Programación y los Compiladores

Syllabus

Objetivo de aprendizaje 1.1.A: Representar patrones y algoritmos encontrados en la vida cotidiana utilizando lenguaje escrito o diagramas.

  • 1.1.A.1 Los algoritmos definen procesos paso a paso que se deben seguir al completar una tarea o resolver un problema. Estos algoritmos pueden representarse mediante lenguaje escrito o diagramas.
  • 1.1.A.2 El secuenciamiento define el orden en que se completan los pasos de un proceso. Los pasos de un proceso se completan uno a la vez.

Objetivo de aprendizaje 1.1.B: Explicar el proceso de compilación y ejecución del código.

  • 1.1.B.1 El código puede escribirse en cualquier editor de texto; sin embargo, se suele utilizar un entorno integrado de desarrollo (IDE) para escribir programas, ya que proporciona herramientas que permiten al programador escribir, compilar y ejecutar código.
  • 1.1.B.2 Un compilador revisa el código en busca de ciertos errores. Los errores detectables por el compilador deben corregirse antes de que el programa pueda ejecutarse.

Objetivo de aprendizaje 1.1.C: Identificar tipos de errores de programación.

  • 1.1.C.1 Un error de sintaxis es un error en el programa donde no se siguen las reglas del lenguaje de programación. Estos errores son detectados por el compilador.
  • 1.1.C.2 Un error lógico es un error en el algoritmo o programa que provoca que este se comporte de manera incorrecta o inesperada. Estos errores se detectan probando el programa con datos específicos para verificar si produce el resultado esperado.
  • 1.1.C.3 Un error de tiempo de ejecución es un error en el programa que ocurre durante la ejecución del mismo. Los errores de tiempo de ejecución suelen provocar que el programa termine de forma anormal.
  • 1.1.C.4 Una excepción es un tipo de error de tiempo de ejecución que ocurre como resultado de un error inesperado que no fue detectado por el compilador. Interrumpe el flujo normal de ejecución del programa.

Fuente: College Board AP Course and Exam Description

Código fuente en una estación de trabajo — los programas se escriben, compilan y ejecutan como instrucciones precisas
Código fuente en una estación de trabajo — los programas se escriben, compilan y ejecutan como instrucciones precisas

Un algoritmo es un procedimiento finito y paso a paso que resuelve un problema. Un programa expresa un algoritmo en un lenguaje que una computadora puede ejecutar. Java es compilado: el compilador traduce tu código fuente en bytecode, que la Máquina Virtual de Java (JVM) ejecuta. Un error de sintaxis (violando la gramática) es detectado por el compilador; un error lógico (resultado incorrecto) no – el programa se ejecuta pero se comporta mal.

Un compilador traduce todo el programa de una vez; un intérprete lo ejecuta línea por línea
Un compilador traduce todo el programa de una vez; un intérprete lo ejecuta línea por línea
Varios chips de procesador de computadora vistos desde abajo
Tu programa Java se compila en instrucciones que un CPU como uno de estos ejecuta realmente
Vocabulario Entrenar
Inglés Chino Pinyin
algorithm/ˈælɡərɪθəm/ 算法 suàn fǎ
program/ˈprəʊɡræm/ 程序 chéng xù
compiled/kəmˈpaɪld/ 编译 biān yì
compiler/kəmˈpaɪlə/ 编译器 biān yì qì
syntax error/ˈsɪntæks ˈerə/ 语法错误 yǔ fǎ cuò wù
logic error/ˈlɒdʒɪk ˈerə/ 逻辑错误 luó jí cuò wù
1.2

Variables y Tipos de Datos

Syllabus

Objetivo de Aprendizaje 1.2.A: Identificar la categoría de tipo de dato más adecuada para una especificación particular.

  • 1.2.A.1 Un tipo de dato es un conjunto de valores y un conjunto correspondiente de operaciones sobre esos valores. Los tipos de datos pueden clasificarse como primitivos o de referencia.
  • 1.2.A.2 Los tipos de dato primitivos utilizados en este curso definen el conjunto de valores y las operaciones correspondientes sobre esos valores para números y valores booleanos.
  • 1.2.A.3 Un tipo de referencia se utiliza para definir objetos que no son tipos primitivos.

Objetivo de Aprendizaje 1.2.B: Desarrollar código para declarar variables que almacenen números y valores booleanos.

  • 1.2.B.1 Los tres tipos de dato primitivos utilizados en este curso son int, double y boolean. Un valor int es un número entero. Un valor double es un número real. Un valor boolean es true (verdadero) o false (falso).
    • Afirmación de exclusión: Los otros cinco tipos de dato primitivos (long, short, byte, float y char) están fuera del alcance del curso y del examen de AP Computer Science A.
  • 1.2.B.2 Una variable es una ubicación de almacenamiento que contiene un valor, el cual puede cambiar mientras el programa se está ejecutando. Cada variable tiene un nombre y un tipo de dato asociado. Una variable de un tipo primitivo contiene un valor primitivo de ese tipo.

Fuente: College Board AP Course and Exam Description

Una variable es una caja con nombre que almacena un valor de un tipo fijo. Los principales tipos primitivos de Java son int (números enteros), double (decimales) y boolean (true/false). Se declaran poniendo primero el tipo:

Los tipos de datos básicos de Java, cada uno almacenando un tipo diferente de valor
Los tipos de datos básicos de Java, cada uno almacenando un tipo diferente de valor
int score = 90;
double price = 4.99;
boolean passed = true;
Explorar

Explorar cómo una variable almacena un valor a la vez

Una variable es una caja con nombre que almacena un valor de un tipo fijo. Pase por las líneas y observe cómo cada caja toma su valor; note que reasignar score sobrescribe el número antiguo en lugar de crear una nueva caja.

Vocabulario Entrenar
Inglés Chino Pinyin
variable/ˈveərɪəbl/ 变量 biàn liàng
type/taɪp/ 类型 lèi xíng
primitive types/ˈprɪmɪtɪv taɪps/ 基本类型 jī běn lèi xíng
expression/ekˈspreʃn/ 表达式 biǎo dá shì
modulus/ˈmɒdjʊləs/ 取模 qǔ mó
escape sequence/eˈskeɪp ˈsiːkwəns/ 转义序列 zhuǎn yì xù liè
assignment/əˈsaɪnmənt/ 赋值 fù zhí
1.3

Expresiones y Salida

Syllabus

Objetivo de aprendizaje 1.3.A: Desarrollar código para generar una salida y determinar el resultado que se mostraría.

  • 1.3.A.1 System.out.print y System.out.println muestran información en la pantalla del ordenador. System.out.println mueve el cursor a una nueva línea después de mostrar la información, mientras que System.out.print no lo hace.

Objetivo de aprendizaje 1.3.B: Desarrollar código para utilizar literales de cadena y determinar el resultado de usar literales de cadena.

  • 1.3.B.1 Un literal es la representación de código de un valor fijo.
  • 1.3.B.2 Un literal de cadena es una secuencia de caracteres encerrada entre comillas dobles.
  • 1.3.B.3 Las secuencias de escape son secuencias especiales de caracteres que pueden incluirse en una cadena de texto. Comienzan con un \ y tienen un significado especial en Java. Las secuencias de escape utilizadas en este curso incluyen la comilla doble \", la barra invertida \\ y el salto de línea \n.

Objetivo de aprendizaje 1.3.C: Desarrollar código para expresiones aritméticas y determinar el resultado de estas expresiones.

  • 1.3.C.1 Las expresiones aritméticas, que constan de valores numéricos, variables y operadores, incluyen expresiones de tipo int y double.
  • 1.3.C.2 Los operadores aritméticos consisten en suma +, resta -, multiplicación *, división / y resto %. Una operación aritmética que utilice dos valores int evaluará a un valor int. Una operación aritmética que utilice al menos un valor double evaluará a un valor double.
    • Enunciado de exclusión: Las expresiones que dan como resultado valores doubles especiales (p. ej., infinitos y NaN) están fuera del ámbito del curso y examen de AP Computer Science A.
  • 1.3.C.3 Al dividir valores numéricos que son ambos valores int, el resultado es solo la porción entera del cociente. Al dividir valores numéricos que utilizan al menos un valor double, el resultado es el cociente.
  • 1.3.C.4 El operador de resto % se utiliza para calcular el resto cuando un número a se divide por otro número b.
    • Enunciado de exclusión: El uso de valores menores que 0 para a y el uso de valores menores o iguales a 0 para b está fuera del ámbito del curso y examen de AP Computer Science A.
  • 1.3.C.5 Los operadores pueden utilizarse para construir expresiones compuestas. En tiempo de compilación, los valores numéricos se asocian con los operadores según la precedencia de los operadores para determinar cómo se agrupan. Los paréntesis pueden utilizarse para modificar la precedencia de los operadores. La multiplicación, la división y el resto tienen precedencia sobre la suma y la resta. Los operadores con la misma precedencia se evalúan de izquierda a derecha.
  • 1.3.C.6 Intentar dividir un entero por el entero cero dará como resultado una ArithmeticException.
    • Enunciado de exclusión: El uso de la división por cero cuando uno de los valores numéricos es un double está fuera del ámbito del curso y examen de AP Computer Science A.

Fuente: College Board AP Course and Exam Description

Una expresión combina valores y operadores para calcular un resultado: + - * / y % (módulo o residuo, el resto). La división entera truncará: 7 / 2 es 3, mientras que 7 % 2 es 1. La precedencia de operadores sigue la matemática (*,/,% antes que +,-). Imprime con:

System.out.print("no newline");
System.out.println("with newline");

Dividir un entero por el entero 0 (como 7 / 0) no está permitido y causa un error en tiempo de ejecución con una ArithmeticException. Dentro de una cadena de texto, una barra invertida marca una secuencia de escape: \" imprime una comilla doble, \\ una barra invertida simple, y \n inicia una nueva línea – así System.out.println("She said \"hi\""); imprime She said "hi".

Explorar

Explorar el orden de las operaciones paso a paso

Java aplica *, /, % antes que + y -, trabajando de izquierda a derecha. Observe cada paso y vea por qué 2 + 3 * 4 es $14$, no $20$: la multiplicación ocurre primero.

1.4

Sentencias de Asignación e Entrada

Syllabus

Objetivo de aprendizaje 1.4.A: Desarrollar código para sentencias de asignación con expresiones y determinar el valor que se almacena en la variable como resultado de estas sentencias.

  • 1.4.A.1 Cada variable debe recibir un valor antes de poder usarse en una expresión. Dicho valor debe provenir de un tipo de dato compatible. Una variable se inicializa la primera vez que se le asigna un valor. Los tipos de referencia pueden asignar un nuevo objeto o null si no hay ningún objeto. El literal null es un valor especial utilizado para indicar que una referencia no está asociada con ningún objeto.
  • 1.4.A.2 El operador de asignación = permite a un programa inicializar o cambiar el valor almacenado en una variable. El valor de la expresión del lado derecho se almacena en la variable del lado izquierdo.
    • Afirmación de exclusión: El uso de operadores de asignación dentro de expresiones (por ejemplo, a = b = 4; o a[i += 5]) se encuentra fuera del alcance del curso y examen de AP Computer Science A.
  • 1.4.A.3 Durante la ejecución, una expresión se evalúa para producir un único valor. El valor de una expresión tiene un tipo basado en la evaluación de dicha expresión.

Objetivo de aprendizaje 1.4.B: Desarrollar código para leer la entrada de datos.

  • 1.4.B.1 La entrada puede provenir de diversas formas, como táctil, auditiva, visual o textual. La clase Scanner es una forma de obtener entrada de texto desde el teclado.
    • Afirmación de exclusión: Cualquier forma específica de entrada por parte del usuario se encuentra fuera del alcance del curso y examen de AP Computer Science A.

Fuente: College Board AP Course and Exam Description

Una asignación x = expr; evalúa el lado derecho y lo almacena en la variable del lado izquierdo. Lee la entrada con un Scanner:

Scanner in = new Scanner(System.in);
int age = in.nextInt();
String name = in.next();
1.5

Casting y Rango de Variables

Syllabus

Objetivo de Aprendizaje 1.5.A: Desarrollar código para convertir valores primitivos a diferentes tipos primitivos en expresiones aritméticas y determinar el valor que se produce como resultado.

  • 1.5.A.1 Los operadores de conversión (int) y (double) pueden utilizarse para convertir un valor double a un valor int (o viceversa).
  • 1.5.A.2 Convertir un valor double a un valor int provoca que los dígitos a la derecha del punto decimal sean truncados.
  • 1.5.A.3 Algunos códigos provocan que los valores int sean convertidos automáticamente (ampliados) a valores double.
  • 1.5.A.4 Los valores de tipo double pueden redondearse al entero más cercano mediante (int)(x + 0.5) para números no negativos o (int)(x - 0.5) para números negativos.

Objetivo de Aprendizaje 1.5.B: Describir las condiciones bajo las cuales una expresión entera evalúa a un valor fuera de rango.

  • 1.5.B.1 La constante Integer.MAX_VALUE contiene el valor del mayor valor int posible. La constante Integer.MIN_VALUE contiene el valor del menor valor int posible.
  • 1.5.B.2 Los valores enteros en Java están representados por valores de tipo int, que se almacenan utilizando una cantidad finita (4 bytes) de memoria. Por lo tanto, un valor int debe estar en el rango desde Integer.MIN_VALUE hasta Integer.MAX_VALUE inclusive.
  • 1.5.B.3 Si una expresión evaluaría a un valor int fuera del rango permitido, ocurre un desbordamiento entero (integer overflow). El resultado es un valor int dentro del rango permitido, pero no necesariamente el valor esperado.

Objetivo de Aprendizaje 1.5.C: Describir las condiciones que limitan la precisión de las expresiones.

  • 1.5.C.1 Las computadoras asignan una cantidad especificada de memoria para almacenar datos según el tipo de dato. Si una expresión evaluaría a un double con mayor precisión de la que puede almacenarse en la cantidad de memoria asignada, ocurre un error de redondeo. El resultado se redondeará al valor representable. Para evitar errores de redondeo que ocurren naturalmente, utilice valores int.
    • Afirmación de exclusión: Otros tipos de datos decimales especiales que pueden usarse para evitar errores de redondeo se encuentran fuera del alcance del curso y examen de AP Computer Science A.

Fuente: College Board AP Course and Exam Description

Rango de int, desbordamiento y truncamiento

Cada tipo tiene un rango fijo; un int se desborda al superar aproximadamente 2.1 mil millones. El casting convierte entre tipos. El ensanchamiento (int a double) es automático; el estrechamiento necesita un casting explícito, el cual trunca (no redondea):

double avg = (double) total / count;   // force real division
int whole = (int) 3.9;                 // 3, truncated

Habilidad de examen: vigila cuando la división entera produzca un resultado truncado donde se esperaba un decimal – castea un operando a double primero.

Ejemplo resuelto. Rastrea cada expresión:

  • 7 / 2 → 3 (ambos int, por lo tanto la división trunca);
  • 7.0 / 2 → 3.5 (un double fuerza la división real);
  • 7 % 2 → 1 (el residuo);
  • (double) 7 / 2 → 3.5 (el casteo se une más fuerte que /, por lo que es 7.0 / 2);
  • (double) (7 / 2) → 3.0 (los paréntesis calculan 7 / 2 = 3 en int primero, luego ensanchan).

Las dos últimas parecen similares pero difieren – la posición del casteo decide si ocurre el truncamiento.

Explorar

Por qué int y double almacenan números de manera diferente

Un int contiene solo números enteros en un rango fijo; un double almacena una mantisa y un exponente, intercambiando exactitud por un rango enorme. Convertir double→int descarta la fracción, y un valor fuera del rango de un int provoca desbordamiento.

Vocabulario Entrenar
Inglés Chino Pinyin
Casting/ˈkæstɪŋ/ 类型转换 lèi xíng zhuǎn huàn
library/ˈlaɪbrəri/ 库 kù
abstraction/əbˈstrækʃn/ 抽象 chōu xiàng
Comments/ˈkɒments/ 注释 zhù shì
method signature/ˈmeθəd ˈsɪɡnɪtʃə/ 方法签名 fāng fǎ qiān míng
arguments/ˈɑːɡjuːmənts/ 实参 shí cān
class (static) method/klæs ˈmeθəd/ 类方法 lèi fāng fǎ
1.6

Operadores de Asignación Compuesta

Syllabus

Objetivo de Aprendizaje 1.6.A: Desarrollar código para sentencias de asignación con operadores de asignación compuesta y determinar el valor que se almacena en la variable como resultado.

  • 1.6.A.1 Los operadores de asignación compuesta +=, -=, *=, /= y %= pueden utilizarse en lugar del operador de asignación en expresiones numéricas. Un operador de asignación compuesta realiza la operación aritmética indicada entre el valor de la izquierda y el valor de la derecha, y luego asigna el resultado a la variable de la izquierda.
  • 1.6.A.2 El operador de post-incremento ++ y el operador de post-decremento -- se utilizan para sumar 1 o restar 1 al valor almacenado de una variable numérica. El nuevo valor se asigna a la variable.
    • Enunciado de exclusión: El uso de los operadores de incremento y decremento en forma prefija (p. ej., ++x) está fuera del alcance del curso y examen de AP Computer Science A. El uso de los operadores de incremento y decremento dentro de otras expresiones (p. ej., arr[x++]) está fuera del alcance del curso y examen de AP Computer Science A.

Fuente: College Board AP Course and Exam Description

Abreviaturas combinan una operación con la asignación: x += 5 significa x = x + 5; de igual manera -=, *=, /=, %=. Los operadores de incremento y decremento x++ y x-- suman o restan uno.

1.7

Interfaz de Programación de Aplicaciones (API) y Bibliotecas

Syllabus

Objetivo de Aprendizaje 1.7.A: Identificar los atributos y comportamientos de una clase contenida en las bibliotecas de una API.

  • 1.7.A.1 Las bibliotecas son conjuntos de clases. Una especificación de interfaz de programación de aplicaciones (API) informa al programador sobre cómo utilizar dichas clases. La documentación encontrada en las especificaciones de APIs y bibliotecas es esencial para comprender los atributos y comportamientos de una clase definida por la API. Una clase define un tipo de referencia específico. Las clases en las APIs y bibliotecas se agrupan en paquetes. Se pueden utilizar clases y bibliotecas de clases existentes para crear objetos.
  • 1.7.A.2 Los atributos se refieren a los datos relacionados con la clase y se almacenan en variables. Los comportamientos se refieren a lo que las instancias de la clase pueden hacer (o lo que se puede hacer con ellas) y están definidos por métodos.

Fuente: College Board AP Course and Exam Description

Una API (Interfaz de Programación de Aplicaciones) es la lista publicada de clases y métodos que puedes usar. Una biblioteca es una colección de clases predefinidas (como Math, String, Scanner). Lees la documentación de la API para aprender qué necesita un método (sus parámetros) y qué devuelve, sin ver su código interno – un ejemplo de abstracción.

1.8

Documentación con Comentarios

Syllabus

Objetivo de Aprendizaje 1.8.A: Describir la funcionalidad y el uso del código mediante comentarios.

  • 1.8.A.1 Los comentarios se escriben para que tanto el programador original como otros programadores comprendan el código y su funcionalidad, pero son ignorados por el compilador y no se ejecutan cuando se ejecuta el programa. Tres tipos de comentarios en Java incluyen /* */, que genera un bloque de comentarios; //, que genera un comentario en una sola línea; y /** */, que son comentarios Javadoc y se utilizan para crear documentación de API.
  • 1.8.A.2 Una precondición es una condición que debe ser verdadera justo antes de la ejecución de un método para que este se comporte según lo esperado. No se espera que el método verifique si las precondiciones se cumplen.
  • 1.8.A.3 Una postcondición es una condición que siempre debe ser verdadera después de la ejecución de un método. Las postcondiciones describen el resultado de la ejecución en términos de lo que se está devolviendo o el valor actual de los atributos de un objeto.

Fuente: College Board AP Course and Exam Description

Los comentarios son ignorados por el compilador pero explican el código a los humanos: // para una sola línea, /* ... */ para un bloque, y /** ... */ para un comentario Javadoc que documenta el propósito, parámetros y valor de retorno de un método. Aquí se escriben las precondiciones y postcondiciones precisas.

1.9

Firmas de Métodos

Syllabus

Objetivo de aprendizaje 1.9.A: Identificar el método correcto a llamar basándose en la documentación y las firmas de los métodos.

  • 1.9.A.1 Un método es un bloque de código con nombre que solo se ejecuta cuando se llama. Un bloque de código es cualquier sección de código encerrada entre llaves. La abstracción procedural permite a un programador utilizar un método conociendo lo que hace el método, incluso si no conoce cómo fue escrito.
  • 1.9.A.2 Un parámetro es una variable declarada en la cabecera de un método o constructor y puede utilizarse dentro del cuerpo del método. Esto permite pasar valores o argumentos y usarlos mediante un método o constructor. Una firma de método para un método con parámetros consta del nombre del método y la lista ordenada de tipos de parámetros. Una firma de método para un método sin parámetros consta del nombre del método y una lista de parámetros vacía.

Objetivo de aprendizaje 1.9.B: Describir cómo llamar a métodos.

  • 1.9.B.1 Un método void no tiene valor de retorno y, por lo tanto, no se llama como parte de una expresión.
  • 1.9.B.2 Un método no void devuelve un valor que es del mismo tipo que el tipo de retorno indicado en la cabecera. Para utilizar el valor devuelto al llamar a un método no void, debe almacenarse en una variable o utilizarse como parte de una expresión.
  • 1.9.B.3 Un argumento es un valor que se pasa a un método cuando se llama al método. Los argumentos pasados a un método deben ser compatibles en número y orden con los tipos identificados en la lista de parámetros de la firma del método. Al llamar a métodos, los argumentos se pasan por valor. El paso por valor inicializa los parámetros con copias de los argumentos.
  • 1.9.B.4 Se dice que los métodos están sobrecargados cuando existen múltiples métodos con el mismo nombre pero diferentes firmas.
  • 1.9.B.5 Una llamada a método interrumpe la ejecución secuencial de las instrucciones, haciendo que el programa ejecute primero las instrucciones del método antes de continuar. Una vez que se ha ejecutado la última instrucción del método o se ha ejecutado una instrucción de retorno, el flujo de control regresa al punto inmediatamente posterior a donde se llamó al método.

Fuente: College Board AP Course and Exam Description

Una firma de método es el nombre de un método más sus tipos de parámetros, ej. nextInt() o substring(int, int). Para llamar a un método debes proporcionar argumentos que coincidan con los parámetros en cantidad, tipo y orden. El encabezado del método (la declaración completa) también indica el tipo de retorno – el tipo de valor que el método devuelve (void si ninguno) – pero el tipo de retorno no es parte de la firma, por eso dos métodos no pueden diferir solo por el tipo de retorno.

1.10

Llamadas a Métodos de Clase

Syllabus

Objetivo de Aprendizaje 1.10.A: Desarrollar código para llamar a métodos de clase y determinar el resultado de dichas llamadas.

  • 1.10.A.1 Los métodos de clase están asociados con la clase, no con las instancias de la clase. Los métodos de clase incluyen la palabra clave static en la cabecera antes del nombre del método.
  • 1.10.A.2 Los métodos de clase generalmente se llaman utilizando el nombre de la clase junto con el operador punto. Cuando la llamada al método ocurre dentro de la clase definidora, el uso del nombre de la clase es opcional en la llamada.

Fuente: College Board AP Course and Exam Description

Un método de clase (estático) pertenece a la clase misma, por lo que lo llamas sobre el nombre de la clase: ClassName.method(args). No se necesita un objeto.

Explorar

Seguir una llamada a método de clase en la pila

Llamar a un método de clase como Math.max empuja un nuevo marco a la pila de llamadas; cuando el método devuelve un valor, su marco se elimina y el control vuelve al llamador. Pase paso a paso para ver cómo la pila crece y se encoge.

Vocabulario Entrenar
Inglés Chino Pinyin
class/klæs/ 类 lèi
1.11

Clase Math

Syllabus

Objetivo de aprendizaje 1.11.A: Desarrollar código para escribir expresiones que incluyan llamadas a bibliotecas matemáticas integradas y determinar el valor que se produce como resultado.

  • 1.11.A.1 La clase Math forma parte del paquete java.lang. Las clases en el paquete java.lang están disponibles por defecto.
  • 1.11.A.2 La clase Math contiene únicamente métodos de clase. Los siguientes métodos de la clase Math —incluyendo lo que hacen y cuándo se utilizan— forman parte de la Referencia rápida de Java:
    • static int abs(int x) devuelve el valor absoluto de un valor int.
    • static double abs(double x) devuelve el valor absoluto de un valor double.
    • static double pow(double base, double exponent) devuelve el valor del primer parámetro elevado a la potencia del segundo parámetro.
    • static double sqrt(double x) devuelve la raíz cuadrada no negativa de un valor double.
    • static double random() devuelve un valor double mayor o igual a 0.0 y menor que 1.0.
  • 1.11.A.3 Los valores devueltos por Math.random() pueden manipularse utilizando operadores aritméticos y de conversión (casting) para producir un int aleatorio o un double aleatorio dentro de un rango definido basado en criterios especificados. Cada extremo del rango puede ser inclusivo, lo que significa que el valor está incluido, o exclusivo, lo que significa que el valor no está incluido.

Fuente: College Board AP Course and Exam Description

La clase Math proporciona métodos matemáticos estáticos: Math.abs(x), Math.pow(base, exp), Math.sqrt(x), y Math.random() (un double en $[0,1)$). Para obtener un entero aleatorio de 0 a n-1: (int)(Math.random() * n).

1.12

Objetos: Instancias de Clases

Syllabus

Objetivo de Aprendizaje 1.12.A: Explicar la relación entre una clase y un objeto.

  • 1.12.A.1 Un objeto es una instancia específica de una clase con atributos definidos. Una clase es la implementación formal, o plano, de los atributos y comportamientos de un objeto.
  • 1.12.A.2 Se puede desarrollar una jerarquía de clases al colocar atributos y comportamientos comunes de clases relacionadas en una sola clase llamada superclase. Las clases que extienden una superclase, llamadas subclases, pueden hacer uso de los atributos y comportamientos existentes de la superclase sin reemplazarlos en el código. Esto crea una relación de herencia desde las subclases hacia la superclase.
    • Afirmación de exclusión: El diseño e implementación de relaciones de herencia se encuentran fuera del alcance del curso y examen de AP Computer Science A.
  • 1.12.A.3 Todas las clases en Java son subclases de la clase Object.

Objetivo de Aprendizaje 1.12.B: Desarrollar código para declarar variables que almacenen tipos de referencia.

  • 1.12.B.1 Una variable de un tipo de referencia contiene una referencia a un objeto, la cual puede considerarse como la dirección de memoria de dicho objeto.

Fuente: College Board AP Course and Exam Description

= copia la referencia, no el objeto

Una clase es un plano; un objeto es una instancia concreta construida a partir de él. Una clase agrupa datos (campos) con comportamiento (métodos) – el corazón de la programación orientada a objetos. String, Scanner y ArrayList son todas clases que instancias.

Las clases pueden organizarse en una jerarquía. Un superclase contiene atributos y comportamientos compartidos por varias subclases que la extend – una relación de herencia. Cada clase en Java es finalmente una subclase de la clase interna Object, por eso cada objeto ya tiene un método toString; escribir un método de subclase con la misma firma que uno de superclase es sobrecarga de métodos (method overriding). (Diseñar tu propia herencia está fuera de este curso, pero se espera que reconozcas este vocabulario.)

Un diagrama de clases: atributos privados y métodos públicos
Un diagrama de clases: atributos privados y métodos públicos
Una clase es un plano; cada objeto es una instancia construida a partir de él
Una clase es un plano; cada objeto es una instancia construida a partir de él
Vocabulario Entrenar
Inglés Chino Pinyin
object/ˈɒbdʒekt/ 对象 duì xiàng
instance/ˈɪnstəns/ 实例 shí lì
object-oriented programming/ˈɒbdʒekt ˈɔːrɪəntɪd ˈprəʊɡræmɪŋ/ 面向对象编程 miàn xiàng duì xiàng biān chéng
superclass/ˈsuːpəklæs/ 父类 fù lèi
subclasses/ˈsʌbklæsɪz/ 子类 zi lèi
inheritance relationship/ɪnˈherɪtəns rɪˈleɪʃənʃɪp/ 继承关系 jì chéng guān xì
method overriding/ˈmeθəd ˌəʊvəˈraɪdɪŋ/ 方法重写 fāng fǎ zhòng xiě
Instantiation/ˌɪnstænʃɪˈeɪʃn/ 实例化 shí lì huà
reference/ˈrefrəns/ 引用 yǐn yòng
1.13

Creación y Almacenamiento de Objetos (Instanciación)

Syllabus

Objetivo de aprendizaje 1.13.A: Identificar, mediante su firma, el constructor correcto que se está invocando.

  • 1.13.A.1 Una clase contiene constructores que se invocan para crear objetos. Tienen el mismo nombre que la clase.
  • 1.13.A.2 La firma del constructor consiste en el nombre del constructor, que es igual al nombre de la clase, y en la lista ordenada de tipos de parámetros. La lista de parámetros, en el encabezado de un constructor, enumera los tipos de los valores que se pasan y sus nombres de variable.
  • 1.13.A.3 Se dice que los constructores están sobrecargados cuando existen múltiples constructores con diferentes firmas.

Objetivo de aprendizaje 1.13.B: Desarrollar código para declarar variables de los tipos correctos para almacenar referencias a objetos.

  • 1.13.B.1 Una variable de tipo referencia almacena una referencia a un objeto o, si no hay objeto, null.

Objetivo de aprendizaje 1.13.C: Desarrollar código para crear un objeto llamando a un constructor.

  • 1.13.C.1 Un objeto generalmente se crea utilizando la palabra clave new seguida de una llamada a uno de los constructores de la clase.
  • 1.13.C.2 Los parámetros permiten que los constructores acepten valores para establecer los valores iniciales de los atributos del objeto.
  • 1.13.C.3 Un argumento de constructor es un valor que se pasa a un constructor cuando este es invocado. Los argumentos pasados a un constructor deben ser compatibles en orden y cantidad con los tipos identificados en la lista de parámetros de la firma del constructor. Al llamar a constructores, los argumentos se pasan por valor. El paso por valor inicializa los parámetros con copias de los argumentos.
  • 1.13.C.4 Una llamada a un constructor interrumpe la ejecución secuencial de las instrucciones, haciendo que el programa ejecute primero las sentencias del constructor antes de continuar. Una vez ejecutada la última sentencia del constructor, el flujo de control retorna al punto inmediatamente posterior a donde se realizó la llamada al constructor.

Fuente: College Board AP Course and Exam Description

La instanciación crea un objeto con la palabra clave new, la cual llama a un constructor:

Scanner in = new Scanner(System.in);
String s = new String("hi");   // or just "hi"

La variable sostiene una referencia (la dirección del objeto), no el objeto mismo. Dos referencias pueden apuntar al mismo objeto; comparándolas con == se comparan direcciones, no contenidos.

Una referencia también puede no apuntar a nada: el valor especial null significa "no asociado a ningún objeto". Llamar a un método en una referencia nula causa un error en tiempo de ejecución con un NullPointerException. Protégete contra ello probando con ==/!= y verificando null primero, para que && cortocircuite antes de que se ejecute el método: if (s != null && s.length() > 0).

Una variable primitiva sostiene su valor directamente, una referencia sostiene una flecha hacia el objeto
Una variable primitiva sostiene su valor directamente, una referencia sostiene una flecha hacia el objeto
Vocabulario Entrenar
Inglés Chino Pinyin
constructor/kənˈstrʌktə/ 构造函数 gòu zào hán shù
null/nʌl/ 空值 kōng zhí
instance method/ˈɪnstəns ˈmeθəd/ 实例方法 shí lì fāng fǎ
immutable/ɪˈmjuːtəbl/ 不可变 bù kě biàn
Interface/ˈɪntəfeɪs/ 应用程序接口 yìng yòng chéng xù jiē kǒu
1.14

Llamadas a Métodos de Instancia

Syllabus

Objetivo de aprendizaje 1.14.A: Desarrollar código para llamar a métodos de instancia y determinar el resultado de estas llamadas.

  • 1.14.A.1 Los métodos de instancia se llaman sobre objetos de la clase. Se utiliza el operador punto junto con el nombre del objeto para invocar los métodos de instancia.
  • 1.14.A.2 Una llamada a un método en una referencia null dará como resultado un NullPointerException.

Fuente: College Board AP Course and Exam Description

Un método de instancia actúa sobre un objeto específico, por lo que lo llamas sobre la referencia al objeto: object.method(args). Ejemplo: in.nextInt(), word.length().

1.15

Manipulación de Cadenas

Syllabus

Objetivo de aprendizaje 1.15.A: Desarrollar código para crear objetos de cadena y determinar el resultado de crear y combinar cadenas.

  • 1.15.A.1 Un objeto String representa una secuencia de caracteres y se puede crear utilizando un literal de cadena o llamando al constructor de la clase String.
  • 1.15.A.2 La clase String forma parte del paquete java.lang. Las clases del paquete java.lang están disponibles por defecto.
  • 1.15.A.3 Un objeto String es inmutable, lo que significa que una vez creado un objeto String, sus atributos no pueden ser modificados. Los métodos llamados en un objeto String no cambian el contenido del objeto String.
  • 1.15.A.4 Dos objetos String pueden concatenarse o combinarse utilizando el operador + o +=, resultando en un nuevo objeto String. Un valor primitivo puede concatenarse con un objeto String. Esto provoca la conversión implícita del valor primitivo a un objeto String.
  • 1.15.A.5 Un objeto String puede concatenarse con cualquier objeto, lo que llama implícitamente al método toString del objeto (un comportamiento garantizado por la relación de herencia que toda clase tiene con la clase Object). El método toString de un objeto devuelve un valor de cadena que representa al objeto. Las subclases de Object suelen sobrescribir el método toString con una implementación específica de la clase. La sobrescritura de métodos ocurre cuando un método público en una subclase tiene la misma firma de método que un método público en la superclase, pero el comportamiento del método es específico de la subclase.
    • Declaración de exclusión: Sobrescribir el método toString de una clase está fuera del alcance del curso y el examen de AP Computer Science A.

Objetivo de aprendizaje 1.15.B: Desarrollar código para llamar a métodos en objetos de cadena y determinar el resultado de llamar a estos métodos.

  • 1.15.B.1 Un objeto String tiene valores de índice desde 0 hasta uno menos que la longitud de la cadena. Intentar acceder a índices fuera de este rango resultará en un StringIndexOutOfBoundsException.
  • 1.15.B.2 Los siguientes métodos String —incluyendo qué hacen y cuándo se utilizan— forman parte del Referencia rápida de Java:
    • int length() devuelve el número de caracteres en un objeto String.
    • String substring(int from, int to) devuelve la subcadena que comienza en el índice from y termina en el índice to - 1.
    • String substring(int from) devuelve substring(from, length()).
    • int indexOf(String str) devuelve el índice de la primera aparición de str; devuelve -1 si no se encuentra.
    • boolean equals(Object other) devuelve true si this corresponde a la misma secuencia de caracteres que other; devuelve false de lo contrario.
    • int compareTo(String other) devuelve un valor < 0 si this es menor que other; devuelve cero si this es igual a other; devuelve un valor > 0 si this es mayor que other. Las cadenas se ordenan según el alfabeto.
    • Declaración de exclusión: Utilizar el método equals para comparar un objeto String con un objeto de un tipo distinto a String está fuera del alcance del curso y el examen de AP Computer Science A.
  • 1.15.B.3 Una cadena idéntica a la subcadena de un solo elemento en la posición index se puede crear llamando a substring(index, index + 1).

Fuente: College Board AP Course and Exam Description

Las cadenas de texto son inmutables

Los objetos String son inmutables – los métodos devuelven una nueva cadena en lugar de cambiar la original. Métodos clave (todos los índices empiezan en 0):

s.length();            // number of characters
s.substring(2, 5);     // chars at index 2,3,4 (5 excluded)
s.indexOf("ab");       // first position, or -1
s.equals(other);       // content comparison (never use == for Strings)
s.compareTo(other);    // <0, 0, >0 by dictionary order

Habilidad de examen: substring(a, b) incluye el índice a pero excluye b, y la comparación de Strings debe usar .equals, no == – dos de los errores más comunes en Strings.

Ejemplo resuelto. Sea String s = "COMPUTER"; (índices 0–7). Entonces s.length() es 8; s.substring(0, 4) es "COMP" (índices 0,1,2,3 – índice 4 excluido); s.substring(4) es "UTER" (desde el índice 4 hasta el final); s.indexOf("PU") es 3; y s.indexOf("X") es -1 (no encontrado). Contar el extremo excluido de substring es el error más común.

Pedir un índice fuera de 0 a length()-1 (un argumento malo para substring o charAt, ej. s.substring(0, 20) aquí) causa un error con StringIndexOutOfBoundsException – el primo de error de índice de array de la cadena de texto.

Los índices de cadena de texto empiezan en 0
Los índices de cadena de texto empiezan en 0
Explorar

Explorar índices y segmentación de cadenas

Cada carácter tiene un índice, y la numeración comienza en 0. Arrastre el inicio y el final para ver cómo substring(from, to) toma los caracteres desde from hasta — pero sin incluir — to.

1.15

Consejos para el Examen

  • Rastrea el código a mano línea por línea, rastreando el valor de cada variable en una tabla – el examen recompensa el rastreo cuidadoso sobre adivinar.
  • Conoce los tipos primitivos de Java y que la división entera trunca ($7/2$ da $3$); usa un casteo o un double para división real.
  • Distingue errores de tiempo de compilación (sintaxis, tipos) de errores de tiempo de ejecución – conoce los nombrados: ArithmeticException (int ÷ 0), NullPointerException (método en una referencia nula), StringIndexOutOfBoundsException / ArrayIndexOutOfBoundsException – y errores de lógica (salida incorrecta).
  • Sigue la precedencia de operadores e inicializa cada variable antes de usarla.
  • En la respuesta libre, escribe Java completo y compilable – devuelve el tipo correcto y coincide exactamente con el encabezado del método.

Lecciones interactivas sobre este tema

Trátalo paso a paso, con ejercicios de verificación instantánea.

Exámenes Anteriores

Más temas en AP Ciencias de la Computación A

Iniciar sesión o crear cuenta

IGCSE, A-Level & AP