長方形クラス(面積と周長)

生田 陸人
LuaGate エンジニア / 現役エンジニア
編集 LuaGate編集部

長方形クラス(面積と周長)

このレッスンで分かること

  • オブジェクト指向プログラミング (OOP) は、クラス を中心にプログラムを組み立てる考え方です
  • 長方形面積周長 を計算する場面を考えます
  • 変数が増えていくと、どれがどの長方形の値なのか分からなくなります

長方形クラス とは

クラスを使って長方形を表現し、面積と周長を計算する関数を rectInfo(width, height) で実装する。OOP の最初の一歩。

ここまでの章では 関数配列 を中心に扱ってきました。しかし実際のソフトウェアでは、「 の集まり」と「 に対する操作」をひとまとめにしたい場面が多くあります。たとえば 長方形 という概念には 高さ という値があり、面積周長 を計算する操作があります。これらをバラバラの 変数関数 で持つよりも、1 つの設計図にまとめる ほうが、コードが読みやすくなります。これが クラス と呼ばれる仕組みです。

クラスは「値」と「操作」を 1 つの設計図にまとめる道具だ。

オブジェクト指向プログラミング (OOP) は、クラス を中心にプログラムを組み立てる考え方です。JavaPythonJavaScriptGo (構造体 + メソッド) など、ほとんどの主要言語が 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() のように書けば、高さ がセットで管理され、面積 の計算もクラスの中に閉じ込められます。

クラスの基本構造

diagram (will load when visible)

図のポイント (テキスト併記)

  • 属性 (フィールド) は クラス が持つ値、メソッドクラス が持つ関数です

属性 (フィールド) は クラス が持つ値、メソッドクラス が持つ関数です。コンストラクタ (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); } }

JavaScriptclass 構文で書けます。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.widthself を忘れる。Python では self を介して インスタンス の属性にアクセスする。
  • JavaScriptthisアロー関数 の中で使い、undefined になる。普通の function 構文を使うか、class のメソッドで書く。
  • Javastatic メソッドにすると、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 データ構造を表現し、pushpop の操作列を受け取って最終状態を配列で返す stackOps(ops) を実装する方法を学びます。

事前確認 — 進む前に次の 3 つができることを確認しましょう。

  1. 長方形クラス の要点を自分の言葉で説明できる
  2. このレッスンの最小コード (または操作手順) を見ずに書ける
  3. 練習問題やクイズで間違えた箇所を読み直して理解した

理解度チェック (30 秒)

Q. 長方形クラス とは何か、1 文で説明してください。

この章のポイント

A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。

関連レッスン

要件

  1. 関数 rectInfo(width, height) を実装し、[面積, 周長] の配列を返す
  2. 内部で Rectangle クラス (または同等の構造体) を定義し、area / perimeter 相当の操作を持たせる
  3. 面積は 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]

ヒント

main.py
main.py
学習モード

メモ

長方形クラス(面積と周長)

⌘S で保存