長方形クラス(面積と周長)
長方形クラス(面積と周長)
このレッスンで分かること
オブジェクト指向プログラミング(OOP) は、クラスを中心にプログラムを組み立てる考え方です長方形の面積と周長を計算する場面を考えます- 変数が増えていくと、どれがどの長方形の値なのか分からなくなります
長方形クラス とは
クラスを使って長方形を表現し、面積と周長を計算する関数を
rectInfo(width, height)で実装する。OOP の最初の一歩。
ここまでの章では 関数 と 配列 を中心に扱ってきました。しかし実際のソフトウェアでは、「値 の集まり」と「値 に対する操作」をひとまとめにしたい場面が多くあります。たとえば 長方形 という概念には 幅 と 高さ という値があり、面積 や 周長 を計算する操作があります。これらをバラバラの 変数 と 関数 で持つよりも、1 つの設計図にまとめる ほうが、コードが読みやすくなります。これが クラス と呼ばれる仕組みです。
クラスは「値」と「操作」を 1 つの設計図にまとめる道具だ。
オブジェクト指向プログラミング (OOP) は、クラス を中心にプログラムを組み立てる考え方です。Java や Python、JavaScript、Go (構造体 + メソッド) など、ほとんどの主要言語が OOP をサポートしています。
同じ概念を、
属性とメソッドのペアで表現することで、「これは長方形なのだ」と読み手に伝わるコードになる。
クラスを使うメリット
長方形 の 面積 と 周長 を計算する場面を考えます。クラス を使わずに書くと、こうなります。
Python
width = 5
height = 3
area = width * height
perimeter = 2 * (width + height)変数が増えていくと、どれがどの長方形の値なのか分からなくなります。クラス でまとめると、こう書けます。
Python
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
def perimeter(self):
return 2 * (self.width + self.height)Rectangle(5, 3).area() のように書けば、幅 と 高さ がセットで管理され、面積 の計算もクラスの中に閉じ込められます。
クラスの基本構造
図のポイント (テキスト併記)
属性(フィールド) はクラスが持つ値、メソッドはクラスが持つ関数です
属性 (フィールド) は クラス が持つ値、メソッド は クラス が持つ関数です。コンストラクタ (Python では __init__) は クラス から インスタンス を作るときに呼ばれる特別なメソッドで、初期値をセットします。
各言語のクラス
JavaScript
class Rectangle {
constructor(width, height) {
this.width = width;
this.height = height;
}
area() { return this.width * this.height; }
perimeter() { return 2 * (this.width + this.height); }
}JavaScript も class 構文で書けます。this で インスタンス の 属性 にアクセスする点が Python と少し違います。
Java
public class Rectangle {
int width;
int height;
public Rectangle(int width, int height) {
this.width = width;
this.height = height;
}
public int area() { return width * height; }
public int perimeter() { return 2 * (width + height); }
}Java は 静的型付け なので、int などの型を明示的に書きます。OOP 発祥の言語の 1 つで、クラス を書くスタイルが最も「教科書通り」です。
インスタンスを返さずに配列で返す
chotdekiru のテストランナーは
クラスのインスタンスを直接比較できない。配列や数値などの単純な値で返そう。
このレッスンでは、Rectangle クラスを内部で作って、面積 と 周長 を計算し、[area, perimeter] の配列で返す関数 rectInfo(width, height) を実装します。クラスのインスタンス自体を返すと、{ width: 5, height: 3 } のような表現になり、テストで比較しづらくなるためです。
よくある間違い
self.widthのselfを忘れる。Python ではselfを介してインスタンスの属性にアクセスする。JavaScriptでthisをアロー関数の中で使い、undefinedになる。普通のfunction構文を使うか、classのメソッドで書く。Javaでstaticメソッドにすると、thisが使えずインスタンスの属性が読めない。
やってみよう
rectInfo(width, height) を実装し、[面積, 周長] の 配列 を返してください。内部で Rectangle のような クラス (または Java の通常クラス) を使う設計が OOP の基本ですが、テストでは配列だけ比較するので、最終的に [area, perimeter] を return できれば OK です。負の値 は来ないものとして問題ありません。
よくある質問
Q. このトピックは実務でどう役立ちますか?
A. DB のクエリ最適化、API 設計、データ構造の選択など、設計判断の根拠になります。表面的にライブラリを使うだけでなく「なぜそれが速いのか」を理解できると、性能問題を未然に防げます。コーディング面接でも頻出のテーマです。
Q. 計算量はどう求めれば良いですか?
A. ループのネストごとに掛け算する、再帰なら漸化式から解く、というのが基本です。Big-O 表記は定数倍と低次の項を無視するため、n の指数(n²、n log n など)に注目してください。最悪・平均・最良の 3 つを意識すると説得力が増します。
Q. 覚えるべき定番アルゴリズムは何ですか?
A. 二分探索、クイックソート/マージソート、BFS/DFS、ダイクストラ、DP の基本問題(フィボナッチ・ナップサック)が必修です。これらを「白紙から書ける」状態にすると、応用問題が一気に解けるようになります。
次のレッスン
次は スタッククラス(push と pop) で、クラスを使って LIFO データ構造を表現し、push と pop の操作列を受け取って最終状態を配列で返す stackOps(ops) を実装する方法を学びます。
事前確認 — 進む前に次の 3 つができることを確認しましょう。
- 長方形クラス の要点を自分の言葉で説明できる
- このレッスンの最小コード (または操作手順) を見ずに書ける
- 練習問題やクイズで間違えた箇所を読み直して理解した
理解度チェック (30 秒)
Q. 長方形クラス とは何か、1 文で説明してください。
A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。
関連レッスン
要件
- 関数
rectInfo(width, height)を実装し、[面積, 周長]の配列を返す - 内部で
Rectangleクラス (または同等の構造体) を定義し、area/perimeter相当の操作を持たせる - 面積は
width * height、周長は2 * (width + height)で計算する
入出力例
test-cases.txt
rectInfo(5, 3) → [15,16]
rectInfo(1, 1) → [1,4]
rectInfo(10, 4) → [40,28]
rectInfo(7, 7) → [49,28]
rectInfo(2, 100) → [200,204]