コンテンツへスキップ

物体と手法の使用

APコンピュータサイエンスA · トピック 1

查看幻灯片 練習する
このトピックのビデオレッスン 動画ページを開く
15:05

物体と手法の使用

这里是两个Java程序。第一个缺少分号。第二个将七除以二,并将结果存储为整数。编译器会停止…

英語ナレーション・英語+中文字幕 burning-in

1.1

アルゴリズム、プログラミング、コンパイラーへの入門

シラバス

学習目標 1.1.A: 日常に見られるパターンやアルゴリズムを、言語表現または図表を用いて表現せよ。

  • 1.1.A.1 アルゴリズム は、タスクの実行や問題解決の際に行うべき手順を段階的に定義する。これらのアルゴリズムは、言語表現または図表で表すことができる。
  • 1.1.A.2 シーケンシング は、プロセス中のステップが完了される順序を定義する。プロセス中のステップは、1つずつ順に完了される。

学習目標 1.1.B: コードのコンパイルおよび実行プロセスを説明せよ。

  • 1.1.B.1 コードはどのようなテキストエディタでも書けるが、統合開発環境 (IDE) がよく用いられるのは、プログラマがコードを書き、コンパイルし、実行するためのツールを提供するからである。
  • 1.1.B.2 コンパイラ は、コードに何らかのエラーが含まれているかチェックする。コンパイラによって検出可能なエラーは、プログラムを実行する前に修正されなければならない。

学習目標 1.1.C: プログラミングエラーの種類を識別せよ。

  • 1.1.C.1 構文エラー は、プログラミング言語のルールに従っていないため、プログラム中に生じるミスである。これらのエラーはコンパイラによって検出される。
  • 1.1.C.2 論理エラー は、アルゴリズムまたはプログラムに含まれるミスであり、予期しない、あるいは誤った振る舞いを引き起こす。これらのエラーは、特定のデータでプログラムをテストして、期待される結果が得られるかどうかを確認することで検出される。
  • 1.1.C.3 ランタイムエラー は、プログラムの実行中に生じるプログラムのミスである。ランタイムエラーは通常、プログラムが異常に終了することを引き起こす。
  • 1.1.C.4 例外 は、コンパイラによって検出されない予期せぬエラーの結果として生じるランタイムエラーの一種である。これはプログラムの通常の実行フローを中断する。

出典: College Board AP コースおよび試験説明書

ワークステーション上のソースコード — プログラムは正確な指示として記述、コンパイル、実行される
ワークステーション上のソースコード——プログラムは精密な指示として記述、コンパイル、実行されます

アルゴリズムとは、問題を解決するための有限かつ段階的な手順です。プログラムは、コンピュータが実行できる言語でアルゴリズムを表現したものです。Javaはコンパイル方式です。コンパイラがソースコードをバイトコードに翻訳し、Java仮想機械 (JVM) がそれを実行します。構文エラー(文法の破綻)はコンパイラによって検出されますが、論理エラー(誤った結果)は検出されません——プログラムは実行されますが、意図せぬ動作をします。

コンパイラーはプログラム全体を一括で翻訳し、インタープリターは行ごとに実行する
コンパイラはプログラム全体を一度に翻訳します;インタープリタは行ごとに実行します
下から見た複数のコンピュータプロセッサチップ
あなたのJavaプログラムは、このようなCPUが実際に実行する指令にコンパイルされます
English 日本語
compiler/kəmˈpaɪlə/ コンパイラ
syntax error/ˈsɪntæks ˈerə/ 構文エラー
logic error/ˈlɒdʒɪk ˈerə/ ロジックエラー
variable/ˈveərɪəbl/ 変数
1.2

変数とデータ型

シラバス

学習目標 1.2.A: 特定の仕様に対して最も適切なデータタイプのカテゴリーを特定する。

  • 1.2.A.1 データタイプとは、一連の値とそれらに対する対応する操作のセットのことです。データタイプは、プリミティブまたは参照のいずれかに分類されます。
  • 1.2.A.2 このコースで使用されるプリミティブデータタイプは、数値およびブール値に対する一連の値と対応する操作を定義しています。
  • 1.2.A.3 参照タイプは、プリミティブタイプではないオブジェクトを定義するために使用されます。

学習目標 1.2.B: 数値およびブール値を格納するための変数を宣言するコードを作成する。

  • 1.2.B.1 このコースで使用される3つのプリミティブデータタイプは int, double, boolean です。 int 値は整数です。 double 値は実数です。 boolean 値は true または false のどちらかです。
    • 除外事項: 他の5つのプリミティブデータタイプ (long, short, byte, float, char) は、APコンピュータサイエンスAコースおよび試験の範囲外です。
  • 1.2.B.2 変数とは、値を保持する格納場所であり、プログラム実行中に値が変更できる可能性があります。すべての変数は名前と関連付けられたデータタイプを持っています。プリミティブタイプの変数は、そのタイプからのプリミティブ値を保持します。

出典: College Board AP コースおよび試験説明書

変数とは、固定された型の値を格納する名付けられた箱です。Javaの主要なプリミティブ型には、int (整数)、double (小数)、および boolean (true/false) があります。型を先に表示して宣言します:

Javaの基本データタイプ — それぞれ異なる種類の値を格納する
Javaの基本データ型、それぞれ異なる種類の値を格納する
int score = 90;
double price = 4.99;
boolean passed = true;
探索

Explore how a variable holds one value at a time

A variable is a named box that stores one value of a fixed type. Step through the lines and watch each box take its value; notice that reassigning score overwrites the old number rather than making a new box.

English 日本語
type/taɪp/ タイプ(文字)
primitive types/ˈprɪmɪtɪv taɪps/ プリミティブ型
expression/ekˈspreʃn/ 表現
modulus/ˈmɒdjʊləs/ 絶対値
escape sequence/eˈskeɪp ˈsiːkwəns/ エスケープシーケンス
assignment/əˈsaɪnmənt/ 代入
Casting/ˈkæstɪŋ/ キャスト
library/ˈlaɪbrəri/ ライブラリ
abstraction/əbˈstrækʃn/ 抽象化
Comments/ˈkɒments/ コメント
method signature/ˈmeθəd ˈsɪɡnɪtʃə/ メソッドシグネチャ
arguments/ˈɑːɡjuːmənts/ 引数(パラメータ)と呼ばれる
class (static) method/klæs ˈmeθəd/ クラス(静的)メソッド
1.3

式と出力

シラバス
Learning ObjectiveEssential Knowledge

1.3.A
Develop code to generate output and determine the result that would be displayed.

  • 1.3.A.1 System.out.print and System.out.println display information on the computer display. System.out.println moves the cursor to a new line after the information has been displayed, while System.out.print does not.

1.3.B
Develop code to utilize string literals and determine the result of using string literals.

  • 1.3.B.1 A literal is the code representation of a fixed value.
  • 1.3.B.2 A string literal is a sequence of characters enclosed in double quotes.
  • 1.3.B.3 Escape sequences are special sequences of characters that can be included in a string. They start with a \ and have a special meaning in Java. Escape sequences used in this course include double quote \", backslash \\, and newline \n.

1.3.C
Develop code for arithmetic expressions and determine the result of these expressions.

  • 1.3.C.1 Arithmetic expressions, which consist of numeric values, variables, and operators, include expressions of type int and double.
  • 1.3.C.2 The arithmetic operators consist of addition +, subtraction -, multiplication *, division /, and remainder %. An arithmetic operation that uses two int values will evaluate to an int value. An arithmetic operation that uses at least one double value will evaluate to a double value.
    • Exclusion statement: Expressions that result in special double values (e.g., infinities and NaN) are outside the scope of the AP Computer Science A course and exam.
  • 1.3.C.3 When dividing numeric values that are both int values, the result is only the integer portion of the quotient. When dividing numeric values that use at least one double value, the result is the quotient.
  • 1.3.C.4 The remainder operator % is used to compute the remainder when one number a is divided by another number b.
    • Exclusion statement: The use of values less than 0 for a and the use of values less than or equal to 0 for b is outside the scope of the AP Computer Science A course and exam.
  • 1.3.C.5 Operators can be used to construct compound expressions. At compile time, numeric values are associated with operators according to operator precedence to determine how they are grouped. Parentheses can be used to modify operator precedence. Multiplication, division, and remainder have precedence over addition and subtraction. Operators with the same precedence are evaluated from left to right.
  • 1.3.C.6 An attempt to divide an integer by the integer zero will result in an ArithmeticException.
    • Exclusion statement: The use of dividing by zero when one numeric value is a double is outside the scope of the AP Computer Science A course and exam.

出典: College Board AP コースおよび試験説明書

式は値と演算子を組み合わせて計算結果を導き出します:+ - * / と % (剰余演算、あまり)。 整数除算は切り捨てを行います:7 / 2 は 3 となり、7 % 2 は 1 となります。演算子の優先順位は数学に従います(*, /, % が +, - より前に評価されます)。出力するには以下を使用します:

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

整数を整数 0 (例:7 / 0 )で割ることは許可されておらず、実行時に ArithmeticException エラーを発生させる。文字列内ではバックスラッシュは エスケープシーケンス を示し、 \" は二重引用符を出力し、 \\ はバックスラッシュ自体を出力し、 \n は改行を開始するため、 System.out.println("She said \"hi\""); は She said "hi" を出力する。

探索

Explore the order of operations step by step

Java applies *, /, % before + and -, working left to right. Watch each step and see why 2 + 3 * 4 is $14$, not $20$ — the multiplication happens first.

1.4

代入文と入力

シラバス

学習目標 1.4.A: 式を含む代入文のためのコードを作成し、これらの文によって変数に格納される値を決定する。

  • 1.4.A.1 変数は式内で使用される前に必ず値を割り当てられる必要があります。その値は互換のあるデータ型である必要があります。変数は最初に値が割り当てられたときに初期化されます。参照型には、新しいオブジェクトまたはオブジェクトがない場合は null を割り当てることができます。リテラル null は、参照がどのオブジェクトとも関連していないことを示すために使用される特別な値です。
  • 1.4.A.2 代入演算子 = を使用すると、プログラムが変数に格納されている値を初期化または変更できます。右側の式の値が左側の変数に格納されます。
    • 除外事項: 式内での代入演算子(例:a = b = 4; や a[i += 5])の使用は、APコンピュータサイエンスAコースおよび試験の範囲外です。
  • 1.4.A.3 実行中、式は単一の値を生成するために評価されます。式の値は、式の評価に基づいたタイプを持ちます。

学習目標 1.4.B: 入力を読み取るためのコードを作成する。

  • 1.4.B.1 入力は触覚的、音声、視覚的、またはテキストなど、さまざまな形式で提供されることがあります。Scanner クラスはキーボードからのテキスト入力を取得する方法の一つです。
    • 除外事項: ユーザーからの特定の形式の入力は、APコンピュータサイエンスAコースおよび試験の範囲外です。

出典: College Board AP コースおよび試験説明書

代入文 x = expr; は右辺を評価し、左辺の変数に格納する。入力を取得するには Scanner を用いる:

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

キャスティングと変数の範囲

シラバス

学習目標 1.5.A: 算術式内でプリミティブ値を異なるプリミティブ型にキャストするためのコードを作成し、結果として生成される値を決定する。

  • 1.5.A.1 キャスト演算子 (int) と (double) を使用して、double の値を int の値に変換したり(逆も可能)、変換したりできます。
  • 1.5.A.2 double の値を int の値にキャストすると、小数点以下の桁が切り捨てられます。
  • 1.5.A.3 一部のコードでは、int の値が自動的にdouble の値に拡張(ワイドニング)されます。
  • 1.5.A.4 double 型の値は、非負の数字に対して (int)(x + 0.5) で、負の数字に対して (int)(x - 0.5) で四捨五入され、最も近い整数になります。

学習目標 1.5.B: 整数式が範囲外の値に評価される条件を説明する。

  • 1.5.B.1 定数 Integer.MAX_VALUE は、可能な最大の int の値を表します。定数 Integer.MIN_VALUE は、可能な最小の int の値を表します。
  • 1.5.B.2 Javaにおける整数値は、类型为 int の値として表現され、有限の量(4バイト)のメモリに格納されます。したがって、int の値は Integer.MIN_VALUE から Integer.MAX_VALUE までの範囲内(境界値含む)である必要があります。
  • 1.5.B.3 式が許容範囲外の int の値に評価されようとすると、整数オーバーフローが発生します。結果は許容範囲内の int の値となりますが、必ずしも期待される値とは限りません。

学習目標 1.5.C: 式の精度を制限する条件を説明する。

  • 1.5.C.1 コンピュータはデータ型に基づき、データを格納するために指定された量のメモリを割り当てます。式が割り当てられたメモリの量に格納できる精度よりも高い double に評価されようとすると、丸め誤差が発生します。結果は表現可能な値に丸められます。自然に生じる丸め誤差を避けるため、int の値を使用してください。
    • 除外事項: 丸め誤差を避けるために使用できる他の特別な小数型データは、APコンピュータサイエンスAコースおよび試験の範囲外です。

出典: College Board AP コースおよび試験説明書

intの範囲、オーバーフローと切り捨て

各型には固定された範囲があり、int が約2.1億を超えるとオーバーフローする。キャストは型間の転換を行う。拡大(int から double )は自動的に行われるが、縮小には明示的なキャストが必要であり、この場合切り捨て(四捨五入しない)が行われる:

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

試験対策: 小数が期待されているのに整数除算で切り捨てられた結果が生じる場合があることに注意し、一つ目の操作数を先に double にキャスティングしてください。

** worked example.** 各式を追跡します:

  • 7 / 2 → 3 (両方とも int なので、除算は切り捨てられます);
  • 7.0 / 2 → 3.5 (一方が double なので、実数除算が強制されます);
  • 7 % 2 → 1 (あまり)
  • (double) 7 / 2 → 3.5 (型変換は / より優先度が高いため、7.0 / 2 が実行されます);
  • (double) (7 / 2) → 3.0 (括弧内は7 / 2 = 3 をint でまず計算し、その後拡大する)。

最後の2つは似ていますが異なります。型変換の位置が、切り捨てが発生するかどうかを決定します。

探索

Why int and double store numbers differently

An int holds only whole numbers in a fixed range; a double stores a mantissa and an exponent, trading exactness for a huge range. Casting double→int throws away the fraction, and a value past an int's range overflows.

1.6

複合代入演算子

シラバス

学習目標 1.6.A: 複合代入演算子を含む代入文のためのコードを作成し、結果として変数に格納される値を決定する。

  • 1.6.A.1 複合代入演算子 +=、-=、*=、/=、%= は、数値式における代入演算子の代わりに使用できます。複合代入演算子は、左側の値と右側の値の間で指定された算術演算を実行し、その結果を左側の変数に割り当てます。
  • 1.6.A.2 後置増分演算子 ++ と後置減分演算子 -- は、数値変数に格納されている値に 1 を加えたり、1 を引いたりするために使用されます。新しい値が変数に割り当てられます。
    • 除外事項: AP Computer Science A のコースおよび試験の範囲外である: 先置形式(例:++x)でのインクリメント・デクリメント演算子の使用。他の式内(例:arr[x++])でのインクリメント・デクリメント演算子の使用。

出典: College Board AP コースおよび試験説明書

shorthand(省略記法)は演算と代入を組み合わせます: x += 5 は x = x + 5 を意味します。同様に -=, *=, /=, %= も同様です。インクリメントおよびデクリメント演算子 x++ と x-- は値に1を加えたり引いたりします。

1.7

アプリケーション・プログラミング・インターフェース (API) とライブラリ

シラバス

学習目標 1.7.A: API に含まれるライブラリ内のクラスに見られる属性と振る舞いを特定する。

  • 1.7.A.1 ライブラリ はクラスの集合体である。アプリケーション・プログラミング・インターフェース (API) の仕様書は、プログラマーがこれらのクラス如何使用するかを指示する。API 仕様書やライブラリに含まれるドキュメントは、API で定義されたクラスの属性や振る舞いを理解するために不可欠である。クラス は特定の参照型を定義する。API やライブラリ内のクラスはパッケージにグループ化される。既存のクラスやクラス・ライブラリを用いてオブジェクトを作成できる。
  • 1.7.A.2 属性 はクラスに関連するデータを指し、変数に格納される。振る舞い はクラスのインスタンスができること(またはそれらに対して行われること)を指し、メソッドによって定義される。

出典: College Board AP コースおよび試験説明書

API (Application Programming Interface) は、利用可能なクラスとメソッドの公開されたリストです。ライブラリは、既成のクラスの集合 (Math, String, Scanner など) です。APIドキュメントを読むことで、メソッドが必要とするもの (パラメータ) や返す値を、内部コードを見ずに学ぶことができます。これは抽象化の一例です。

English 日本語
algorithm/ˈælɡərɪθəm/ アルゴリズム
program/ˈprəʊɡræm/ プログラム
compiled/kəmˈpaɪld/ 統合された
Interface/ˈɪntəfeɪs/ インターフェース
1.8

コメントによるドキュメンテーション

シラバス

学習目標 1.8.A: コメントを通じてコードの機能と使い方を説明する。

  • 1.8.A.1 コメント は、元のプログラマーや他のプログラマーがコードおよびその機能を理解するために記述されるが、コンパイラには無視され、プログラム実行時には実行されない。Javaにおける3種類のコメントとして、/* */(ブロックコメントを生成)、//(1行分のコメントを生成)、および /** */(Javadocコメントであり、API ドキュメント作成に使用される)がある。
  • 1.8.A.2 前置条件 とは、メソッドが期待通り動作するために、メソッド実行直前に真でなければならない条件のことである。メソッドが前置条件が満たされているかを検証するという期待はない。
  • 1.8.A.3 後条件 (postcondition) とは、メソッドの実行後に常に真でなければならない条件のことである。後条件は、返される値やオブジェクトの属性の現在の値という観点から、実行の結果を説明する。

出典: College Board AP コースおよび試験説明書

コメントはコンパイラによって無視されますが、人間に対してコードを説明するために使用します: // は単一行用、/* ... */ はブロック用、/** ... */ はメソッドの目的、パラメータ、返り値を文書化するJavadocコメントです。正確な前条件と後条件もここに記述されます。

1.9

メソッドシグネチャ

シラバス

学習目標 1.9.A: ドキュメンテーションとメソッド・シグネチャに基づき、適切なメソッドを特定する。

  • 1.9.A.1 メソッド は、呼び出されたときにのみ実行される名付けられたコードのブロックである。コードのブロック は、波括弧で囲まれた任意のコードセクションを指す。手続的抽象 は、メソッドがどのように書かれているかは知らなくても、メソッドが何をするかを知っているだけで、プログラマーがメソッドを使用できるようにする。
  • 1.9.A.2 パラメータ とは、メソッドまたはコンストラクタのヘッダーで宣言された変数であり、メソッド本体内で使用できる。これにより、値や引数をメソッドまたはコンストラクタへ渡して使用できる。パラメータを持つメソッドのメソッド・シグネチャ は、メソッド名とパラメータ型の順序付きリストからなる。パラメータを持たないメソッドのメソッド・シグネチャは、メソッド名と空のパラメータリストからなる。

学習目標 1.9.B: メソッドの呼び出し方法を説明する。

  • 1.9.B.1 void メソッド は戻り値を持たないため、式の一部として呼び出されることはない。
  • 1.9.B.2 非void メソッド は、ヘッダーの戻り型と同じタイプの値を返す。非void メソッドを呼び出す際に戻り値を使用するには、変数に格納するか、式の一部として使用する必要がある。
  • 1.9.B.3 引数 とは、メソッドが呼び出されたときにメソッドへ渡される値である。メソッドへ渡される引数は、メソッド・シグネチャのパラメータリストで識別された型に対して、個数と順序が互換性でなければならない。メソッドを呼び出す際、引数は値渡しによって渡される。値渡し とは、引数のコピーでパラメータを初期化することである。
  • 1.9.B.4 複数のメソッドが存在し、名前が同じだがシグネチャが異なる場合、それらのメソッドはオーバーロードされていると言われる。
  • 1.9.B.5 メソッド・コール は文の順次実行を中断し、メソッド内の文を先に実行してから続きを処理させる。メソッド内の最終文が実行されたり、return 文が実行されたりすると、制御の流れはメソッドが呼び出された直後のポイントに戻される。

出典: College Board AP コースおよび試験説明書

メソッドシグネチャとは、メソッドの名前とそのパラメータ型を指し、例として nextInt() や substring(int, int) があります。メソッドを呼び出すには、数が型、順序でパラメータと一致する引数を提供する必要があります。メソッドヘッダー (完全な宣言) には返り値の型も記載されており、これはメソッドが戻す値の型です (返り値がない場合は void)。しかし、返り値の型はシグネチャの一部ではありません。そのため、返り値の型のみが異なると2つのメソッドは区別できません。

1.10

クラスメソッドの呼び出し

シラバス

学習目標 1.10.A: クラスメソッドを呼び出すコードを作成し、その呼び出しの結果を決定する。

  • 1.10.A.1 クラスメソッド は、クラスのインスタンスではなく、クラス自体に関連付けられる。クラスメソッドのヘッダーには、メソッド名の前に static キーワードが含まれる。
  • 1.10.A.2 クラスメソッドは通常、クラス名とドット演算子を用いて呼び出される。定義されているクラス内でメソッド呼び出しが行われる場合、呼び出しにおいてクラス名を使用することは任意である。

出典: College Board AP コースおよび試験説明書

クラス (静的) メソッドはクラス自体に属するため、クラス名に対して呼び出します: ClassName.method(args)。オブジェクトは必要ありません。

探索

Follow a class-method call on the stack

Calling a class method like Math.max pushes a new frame onto the call stack; when the method returns a value, its frame pops and control goes back to the caller. Step through to watch the stack grow and shrink.

English 日本語
class/klæs/ class
1.11

Math クラス

シラバス
Learning ObjectiveEssential Knowledge

1.11.A
Develop code to write expressions that incorporate calls to built-in mathematical libraries and determine the value that is produced as a result.

  • 1.11.A.1 The Math class is part of the java.lang package. Classes in the java.lang package are available by default.
  • 1.11.A.2 The Math class contains only class methods. The following Math class methods—including what they do and when they are used—are part of the Java Quick Reference:
    • static int abs(int x) returns the absolute value of an int value.
    • static double abs(double x) returns the absolute value of a double value.
    • static double pow(double base, double exponent) returns the value of the first parameter raised to the power of the second parameter.
    • static double sqrt(double x) returns the nonnegative square root of a double value.
    • static double random() returns a double value greater than or equal to 0.0 and less than 1.0.
  • 1.11.A.3 The values returned from Math.random() can be manipulated using arithmetic and casting operators to produce a random int or double in a defined range based on specified criteria. Each endpoint of the range can be inclusive, meaning the value is included, or exclusive, meaning the value is not included.

出典: College Board AP コースおよび試験説明書

Math クラスは静的数学メソッドを提供する:Math.abs(x), Math.pow(base, exp), Math.sqrt(x), Math.random()(double の$[0,1)$ )。0 からn-1 までのランダムな整数を得るには:(int)(Math.random() * n) 。

1.12

オブジェクト: クラスのインスタンス

シラバス

学習目標 1.12.A: クラスとオブジェクトの関係について説明する。

  • 1.12.A.1 オブジェクト は、定義された属性を持つ特定のクラスのインスタンスである。クラス は、オブジェクトの属性および振る舞いの形式化された実装、または設計図である。
  • 1.12.A.2 関連するクラスに共通する属性および振る舞いを一つの スーパークラス と呼ばれるクラスにまとめることで、クラス階層を構築できる。スーパークラスを拡張する サブクラス と呼ばれるクラスは、既存の属性および振る舞いに依存でき、これらの属性および振る舞いをコード上で置き換えることはできない。これにより、サブクラスからスーパークラスへの 継承関係 が生まれる。
    • 除外事項: 継承関係の設計および実装は AP Computer Science A コースおよび試験の対象外である。
  • 1.12.A.3 Java のすべてのクラスは Object クラスのサブクラスである。

学習目標 1.12.B: 引用型を格納するための変数を宣言するコードを作成する。

  • 1.12.B.1 引用型の変数は、オブジェクトへの参照を保持しており、これはそのオブジェクトのメモリアドレスと考えられる。

出典: College Board AP コースおよび試験説明書

= はオブジェクトそのものをコピーするのではなく参照をコピーします

クラスは設計図であり、オブジェクトはその設計図から構築される具体的なインスタンスです。クラスはデータ (フィールド) と振る舞い (メソッド) をまとめました – これがオブジェクト指向プログラミングの核心です。String, Scanner, ArrayList はすべてインスタンス化できるクラスです。

クラスは階層構造で整理できます。スーパークラスは、複数のサブクラスがextend する属性と振る舞いを保持しています – これは継承関係です。Javaのすべてのクラスは最終的に組み込みの Object クラスのサブクラスであるため、すべてのオブジェクトにはすでに toString メソッドがあります。スーパークラスと同じシグネチャを持つサブクラスメソッドを書くことをメソッドオーバーライドと言います。(独自の継承を設計することはこのコースの範囲外ですが、これらの用語を理解していることが求められます。)

クラス図: プライベート属性とパブリックメソッド
クラス図: プライベート属性とパブリックメソッド
クラスは設計図であり、各オブジェクトはその設計図から作られた1つのインスタンスです
クラスは設計図であり、各オブジェクトはその設計図から作られた1つのインスタンスです
English 日本語
object/ˈɒbdʒekt/ 物体
instance/ˈɪnstəns/ インスタンス
object-oriented programming/ˈɒbdʒekt ˈɔːrɪəntɪd ˈprəʊɡræmɪŋ/ オブジェクト指向プログラミング
superclass/ˈsuːpəklæs/ スーパークラス
subclasses/ˈsʌbklæsɪz/ サブクラス
inheritance relationship/ɪnˈherɪtəns rɪˈleɪʃənʃɪp/ 継承関係
method overriding/ˈmeθəd ˌəʊvəˈraɪdɪŋ/ メソッドオーバーライド
Instantiation/ˌɪnstænʃɪˈeɪʃn/ インスタンス化
constructor/kənˈstrʌktə/ コンストラクタ
reference/ˈrefrəns/ 基準
1.13

オブジェクトの作成と保存 (インスタンス化)

シラバス

学習目標 1.13.A: サイグネチャを使用して、正しく呼び出されているコンストラクタを特定する。

  • 1.13.A.1 クラスには、オブジェクトを作成するために呼び出される コンストラクタ が含まれる。それらはクラスと同じ名前を持つ。
  • 1.13.A.2 コンストラクタのサイグネチャ は、コンストラクタの名前(クラス名と同じ)とパラメータタイプの順序付きリストで構成される。ヘッダーにおけるパラメータリストは、渡される値のタイプおよびその変数名を列挙している。
  • 1.13.A.3 サイグネチャが異なる複数のコンストラクタが存在する場合、それらのコンストラクタはオーバーロードされていると言われる。

学習目標 1.13.B: オブジェクトへの参照を保持する正しい型の変数を宣言するコードを作成する。

  • 1.13.B.1 引用型の変数は、オブジェクトへの参照を保持するか、またはオブジェクトがない場合は null を保持する。

学習目標 1.13.C: コンストラクタを呼び出してオブジェクトを作成するコードを作成する。

  • 1.13.C.1 オブジェクトは通常、 new キーワードの後に、そのクラスの一つのコンストラクタへの呼び出しが続く形で作成される。
  • 1.13.C.2 パラメータは、コンストラクタが値を受け取り、オブジェクトの属性の初期値を設定することを可能にする。
  • 1.13.C.3 コンストラクタの引数 は、コンストラクタが呼び出された際にコンストラクタへ渡される値である。コンストラクタに渡される引数は、コンストラクタのサイグネチャにおけるパラメータリストで特定されたタイプに対して、順番と数が互いに互換性がある必要がある。コンストラクタを呼び出す際、引数は値による呼び出しによって渡される。値による呼び出しでは、引数のコピーを用いてパラメータが初期化される。
  • 1.13.C.4 コンストラクタの呼び出しは文の直列的な実行を中断させ、プログラムがまずコンストラクタ内の文を実行してから继续する。コンストラクタの最後の文が実行されると、制御の流れはコンストラクタが呼び出された直後の地点に戻される。

出典: College Board AP コースおよび試験説明書

インスタンス化は new キーワードを使ってオブジェクトを作成し、コンストラクタを呼び出します:

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

変数はオブジェクトそのものではなく参照 (オブジェクトのアドレス) を保持しています。2つの参照が同じオブジェクトを指すことができ、== で比較すると中身ではなくアドレスを比較します。

参照は何かを指さないこともあります: 特殊な値 null は「どのオブジェクトにも接続されていない」ことを意味します。null参照に対してメソッドを呼び出すと、ランタイム中に NullPointerException でクラッシュします。==/!= でテストして null を先に確認することでこれを防ぎ、&& がメソッドを実行する前にショートサーキット (短絡評価) します: if (s != null && s.length() > 0)。

プリミティブ変数は値そのものを保持し、参照はオブジェクトへの矢印を保持します
プリミティブ変数は値そのものを保持し、参照はオブジェクトへの矢印を保持します
English 日本語
null/nʌl/ null
instance method/ˈɪnstəns ˈmeθəd/ インスタンスメソッド
immutable/ɪˈmjuːtəbl/ 不変
1.14

インスタンスメソッドの呼び出し

シラバス

学習目標 1.14.A: インスタンスメソッドを呼び出し、その呼び出しの結果を決定するコードを作成する。

  • 1.14.A.1 インスタンスメソッド は、そのクラスのオブジェクト上で呼び出される。インスタンスメソッドを呼び出す際、ドット演算子とオブジェクト名が併用される。
  • 1.14.A.2 null への参照に対するメソッド呼び出しは、 NullPointerException を結果として返す。

出典: College Board AP コースおよび試験説明書

インスタンスメソッドは特定のオブジェクトに対して動作するため、オブジェクト参照に対して呼び出します: object.method(args)。例: in.nextInt(), word.length()。

1.15

ストリング操作

シラバス
Learning ObjectiveEssential Knowledge

1.15.A
Develop code to create string objects and determine the result of creating and combining strings.

  • 1.15.A.1 A String object represents a sequence of characters and can be created by using a string literal or by calling the String class constructor.
  • 1.15.A.2 The String class is part of the java.lang package. Classes in the java.lang package are available by default.
  • 1.15.A.3 A String object is immutable, meaning once a String object is created, its attributes cannot be changed. Methods called on a String object do not change the content of the String object.
  • 1.15.A.4 Two String objects can be concatenated together or combined using the + or += operator, resulting in a new String object. A primitive value can be concatenated with a String object. This causes the implicit conversion of the primitive value to a String object.
  • 1.15.A.5 A String object can be concatenated with any object, which implicitly calls the object's toString method (a behavior that is guaranteed to exist by the inheritance relationship every class has with the Object class). An object's toString method returns a string value representing the object. Subclasses of Object often override the toString method with class-specific implementation. Method overriding occurs when a public method in a subclass has the same method signature as a public method in the superclass, but the behavior of the method is specific to the subclass.
    • Exclusion statement: Overriding the toString method of a class is outside the scope of the AP Computer Science A course and exam.

1.15.B
Develop code to call methods on string objects and determine the result of calling these methods.

  • 1.15.B.1 A String object has index values from 0 to one less than the length of the string. Attempting to access indices outside this range will result in a StringIndexOutOfBoundsException.
  • 1.15.B.2 The following String methods—including what they do and when they are used—are part of the Java Quick Reference:
    • int length() returns the number of characters in a String object.
    • String substring(int from, int to) returns the substring beginning at index from and ending at index to - 1.
    • String substring(int from) returns substring(from, length()).
    • int indexOf(String str) returns the index of the first occurrence of str; returns -1 if not found.
    • boolean equals(Object other) returns true if this corresponds to the same sequence of characters as other; returns false otherwise.
    • int compareTo(String other) returns a value < 0 if this is less than other; returns zero if this is equal to other; returns a value > 0 if this is greater than other. Strings are ordered based upon the alphabet.
    • Exclusion statement: Using the equals method to compare one String object with an object of a type other than String is outside the scope of the AP Computer Science A course and exam.
  • 1.15.B.3 A string identical to the single element substring at position index can be created by calling substring(index, index + 1).

出典: College Board AP コースおよび試験説明書

ストリングは不変です

String オブジェクトは不変です – メソッドは元の文字列を変更するのではなく、新しい文字列を返します。主要なメソッド (インデックスはすべて 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

試験対策: substring(a, b) はインデックス a を含みますが b は含みません。また、Stringの比較には .equals を使うべきで、== を使ってはいけません – これらは最も頻繁に出題されるStringの罠の2つです。

** worked example (具体例) **. String s = "COMPUTER"; (インデックス 0–7) とします。then s.length() は 8 です; s.substring(0, 4) は "COMP" です (インデックス 0,1,2,3 – インデックス 4 は除外); s.substring(4) は "UTER" です (インデックス 4 から終端まで); s.indexOf("PU") は 3 です; s.indexOf("X") は -1 です (見つかりませんでした)。substring の除外された終端点を数えるのが、最も一般的なミスです。

0 からlength()-1 の外にあるインデックスを指定すると、substring またはcharAt の引数エラー(例えばここではs.substring(0, 20) )により、配列インデックスエラーの親類であるStringIndexOutOfBoundsException でクラッシュする。

ストリングのインデックスは0から始まります
ストリングのインデックスは0から始まります
探索

Explore string indices and slicing

Every character has an index, and the numbering starts at 0. Drag the start and end to see how substring(from, to) takes the characters from from up to — but not including — to.

1.15

試験対策

  • コードを手動で各行ごとにトレースし、表を使って各変数の値を追跡する — 試験では推測よりも慎重なトレースが評価される。
  • Javaのプリミティブ型を知っており、整数除算が切り捨てること ($7/2$ は $3$ を与える) を理解すること。正確な除算には型変換またはdoubleを使用する。
  • コンパイル時エラー(構文、型)とランタイムエラーを区別する – 名称付きのエラーを理解しておく: ArithmeticException (int ÷ 0), NullPointerException (null参照に対するメソッド呼び出し), StringIndexOutOfBoundsException / ArrayIndexOutOfBoundsException – およびロジックエラー(誤った出力)。
  • 演算子の優先順位に従い、変数を使用する前に必ず初期化を行う。
  • フリー回答では、コンパイル可能な完全なJavaコードを記述し、正しい返り値を返し、メソッドヘッダーと正確に一致させること。

このトピックのインタラクティブ授業

一歩ずつ進め、即時チェック付きの問題で学習します。

過去問

APコンピュータサイエンスA の他のトピック

ログインまたはアカウント作成

IGCSE, A-Level & AP