Trong lập trình hướng đối tượng, lớp (class) là một chương trình-mã-khuôn mẫu có thể mở rộng được để tạo các đối tượng, cung cấp giá trị khởi tạo cho trạng thái (biến thành viên) và hiện thực của hàn vi (hàm thành viên hay phương thức). Trong nhiều ngôn ngữ, tên lớp được dùng như là tên của lớp (chính bản thân khuôn mẫu), tên của hàm tạo mặc định của lớp (một chương trình con tạo ra các đối tượng), và như kiểu của đối tượng được sinh ra bằng cách khởi tạo lớp; những khái niệm riêng lẽ này dễ dàng được kết hợp với nhau.
Khi một đối tượng được tạo ra bởi hàm tạo của lớp, đối tượng kết quả được gọi là một thực thể của lớp, và biến thành viên cụ thể của đối tượng được gọi là biến thực thể (instance variable), để tương phản với biến lớp (class variable) vốn được chia sẻ giữa các lớp.
Trong một số ngôn ngữ, lớp chỉ là tính năng khi biên dịch (lớp mới không thể được khai báo trong thời gian chạy), trong khi ở các ngôn ngữ khác lớp là công dân hạng nhất, và nói chung là các đối tượng (điển hình là kiểu Class hay tương tự). Ở các ngôn ngữ đó, một lớp mà tạo ra các lớp được gọi là siêu lớp (metaclass).
Lớp và kiểu
Trong trường hợp ngẫu nhiên, người ta thường tham khảo đến "lớp" của một đối tượng, nhưng trong nghĩa hẹp, đối tượng có kiểu: giao diện, kiểu của các biến thành viên, chữ kí của hàm thành viên (phương thức), và đặc tính. Đồng thời, một lớp các một hiện thực (cụ thể là hiện thực các phương thức), và có thể tạo ra đối tượng của một kiểu nhất định, với một hiện thực nhất định. Về mặt lý thuyết kiểu, lớp là một hiện thực—một cấu trúc dữ liệu cụ thể và tập hợp của các chương trình con— trong khi kiểu là một giao diện. Các lớp khác nhau (cụ thể) có thể sinh ra các đối tượng có cùng kiểu (trừu tượng) (tùy thuộc vào hệ thống loại); ví dụ như, kiểu Stack có thể được hiện thực bởi hai lớp SmallStack (nhanh cho ngăn xếp nhỏ, nhưng khả năng mở rộng kém) và ScalableStack (khả năng mở rộng tốt nhưng phí tổn cao cho ngăn xếp nhỏ). Tương tự, một lớp nhất định có thể có nhiều hàm tạo khác nhau.
Kiểu thường được thể hiện bằng danh từ, ví dụ như người, địa điểm hay vật, hoặc cái gì được chỉ định, và một lớp thể hiện một hiện thực của những thứ đó. Ví dụ, một kiểu Chuối thể hiện đặc tính và tính năng của chuối nói chung, trong khi lớp Chuối ACB và Chuối XYZ thể hiện cách sản xuất chuối (như, nhà cung cấp chuối hay cấu trúc dữ liệu và hàm để thể hiện và vẽ trái chuối trong video game). Lớp Chuối ACB có thể sản xuất chuối đặc biệt: thực thể của lớp Chuối ACB sẽ là đối tượng có kiểu Chuối. Thông thường chỉ duy nhất một hiện thực của kiểu, trong trường hợp này tên lớp thường được đồng nhất với tên kiểu.
Thiết kế và hiện thực
Lớp được tạo thành từ các phần tử cấu trúc và hành vi. Ngôn ngữ lập trình mà bao gồm lớp như hàm tạo lập trình thường cung cấp hỗ trợ cho nhiều tính năng liên quan đến lớp, và cú pháp cần thiết.
Cấu trúc
frame|right|Kí hiệu [[Unified Modeling Language|UML cho lớp]]
Một lớp chứa các mô tả trường dữ liệu (data), hay đặc tính (property), trường (field), thành viên dữ liệu (member variable), hay thuộc tính (''attribute). Thường thì các trường kiểu và tên sẽ được gắn với trạng thái biến trong thời gian chạy chương trình; các biến trạng thái này thuộc về lớp hay thực thể của lớp.
Hành vi
Hành vi của lớp hay thực thể của nó được định nghĩa bằng cách sử dụng phương thức. Phương thức là chương trình con với khả năng hoạt động trên đối tượng hoặc lớp.
Khái niệm giao diện lớp
Mỗi lớp hiện thực (implement, hay nhận ra) một giao diện bằng cách cung cấp cấu trúc và hành vi. Cấu trúc bao gồm dữ liệu và trạng thái, và hành vi gồm đoạn mã để diễn tả cách phương thức được hiện thực.
Ví dụ
Khả năng truy cập thành viên
Đây là một số tập chỉ định truy cập thông dụng:
Riêng tư (private, hay class-private) hạn chế quyền truy cập cho chỉ trong nội bộ lớp. Chỉ có phương thức là thành phần của cùng lớp mới có thể truy cập thanh viên private.
Được bảo vệ (protected, hay class-protected) cho phép chính lớp đó và các lớp con của nó truy cập tới thành viên.
Công cộng (public) có nghĩa bất cứ đoạn mã nào cũng có thể truy cập thành viên đó thông qua tên của nó.
Các mối quan hệ giữa các lớp
Ngoài thiết kế các lớp độc lập, ngôn ngữ lập trình còn hỗ trợ nhiều thiết kế lớp nâng cao dựa trên quan hệ giữa các lớp. Khả năng thiết kế mối quan hệ giữa các lớp thường được cung cấp là sự hợp thành and sự phân cấp.
Sự hợp thành
Sự phân cấp
Định nghĩa lớp con
Phân loại lớp
Có nhiều phân loại lớp, một số có thể trùng lắp nhau.
Trừu tượng và cụ thể
Cục bộ và nội bộ
Trong một số ngôn ngữ, lớp có thể được định nghĩa theo tầm vực thay vì tầm vực toàn cục. Có nhiều loại lớp như vậy: lớp nội bộ (inner class) và lớp cục bộ (local class)
Siêu lớp
Siêu lớp (metaclass) là lớp mà thực thể của nó là lớp.
Non-subclassable
Mixins
Partial
Không khởi tạo
Lớp không khởi tạo (uninstantiable class) cho phép lập trình viên nhóm các trường và phương thức vào cùng một lớp để có thể truy xuất trong thời gian chạy mà không phải khởi tạo thực thể cho lớp đó. Thật vậy, tính năng khởi bị bị cấm đối với loại lớp này.
Ví dụ, trong C#, một lớp được đánh dấu là "tĩnh" (static) không thể được khởi tạo, chỉ có các thành viên tĩnh (trường, phương thức...), không có hàm tạo thực thể, và bị niêm phong (seal).
Không tên
Lớp không tên (unnamed class) hay lớp vô danh (anonymous class) là lớp mà không có ràng buộc với tên hay định danh nào. Điều này tương tự như hàm có tên với hàm vô danh (anonymous function).
Lợi ích
Lợi ích của việc tổ chức phần mềm vào các lớp đối tượng được chia thành ba loại:
Trong lập trình hướng đối tượng, **lớp** (**class**) là một chương trình-mã-khuôn mẫu có thể mở rộng được để tạo các đối tượng, cung cấp giá trị khởi tạo cho trạng thái (biến thành viên)
nhỏ| Chương trình máy tính "Xin chào, thế giới" của [[Brian Kernighan (1978) ]] **Chương trình máy tính** là tập hợp các câu lệnh thực hiện một tác vụ cụ thể khi được máy tính
Trong lập trình hướng đối tượng, **hàm hủy** (tiếng Anh: _destructor_, viết tắt: _dtor_) là một phương thức được gọi tự động để hủy bỏ một đối tượng. Điều này xảy ra khi thời gian
phải|nhỏ|402x402px|[[Mã nguồn của một chương trình máy tính đơn giản được viết bằng ngôn ngữ lập trình C. Khi được biên dịch và chạy, nó sẽ cho kết quả "Hello, world!".]] **Ngôn ngữ lập trình**
thumb|Minh họa mã nguồn [[Java (programming language)|Java với comment **mở đầu** được biểu thị bằng màu **đỏ** và comment **nội dòng** bằng màu **lục**. **Mã chương trình** là bằng màu **lam**.]]Trong lập
**Đóng gói** (tiếng Anh: _encapsulation_) trong ngôn ngữ lập trình là thuật ngữ dùng để chỉ một trong hai khái niệm khác nhau nhưng có liên quan với nhau, đôi khi còn chỉ sự kết
thumb|**[[Phép tính lambda** là một hệ thống hình thức để định nghĩa hàm, ứng dụng hàm và đệ quy được Alonzo Church đề xuất vào những năm 193x.]] **Lý thuyết ngôn ngữ lập trình** (thường
Class trong **C++** là khái niệm được người dùng định nghĩa như một kiểu dữ liệu đơn giản hay một cấu trúc dữ liệu, được khai báo bằng từ khóa **class, **nó chứa các biến
Đây là danh sách các thuật ngữ tìm thấy trong lập trình hướng đối tượng. Một số có liên quan đến lập trình hướng đối tượng và một số thì không. Lưu ý rằng, các
**Pascal** là một ngôn ngữ lập trình cho máy tính thuộc dạng mệnh lệnh và thủ tục, được Niklaus Wirth phát triển vào năm 1970. Pascal là ngôn ngữ lập trình đặc biệt thích hợp
Trong lập trình máy tính, **khai báo** (tiếng Anh: _declaration_) là một cấu trúc ngôn ngữ đặc tả các đặc tính của một định danh: nó công bố một từ (định danh) "có nghĩa là
**Lập trình hướng đối tượng** () là một mẫu hình lập trình dựa trên khái niệm "đối tượng", mà trong đó, đối tượng chứa đựng các dữ liệu trong các trường, thường được gọi là
phải|nhỏ|277x277px| Minh họa của một ứng dụng sử dụng libvorbisfile để phát file Ogg Vorbis Trong khoa học máy tính, **thư viện** là tập hợp các tài nguyên không biến động được sử dụng bởi
**Python** () là ngôn ngữ lập trình bậc cao đa năng. Triết lý thiết kế của nó nhấn mạnh khả năng đọc mã bằng cách sử dụng thụt lề đáng kể. Python có kiểu động
nhỏ|Một chiếc laptop [[Lenovo "thời hiện đại"]] **Máy tính xách tay** hay **máy vi tính xách tay** (Tiếng Anh: **laptop computer** hay **laptop PC**) là một chiếc máy tính cá nhân nhỏ gọn có thể
**Kotlin** là một ngôn ngữ lập trình kiểu tĩnh chạy trên máy ảo Java (JVM) và có thể được biên dịch sang mã nguồn Java hay sử dụng cơ sở hạ tầng trình biên dịch
nhỏ|Ảnh chụp màn hình tài liệu [[API web viết bởi NASA]] Một **giao diện lập trình ứng dụng** (, viết tắt: _API_) là một giao diện mà một hệ thống máy tính hay ứng dụng
**Máy tính bảng** (Tiếng Anh: Tablet computer hay tablet PC), là một thiết bị di động, thông thường có hệ điều hành di động và mạch xử lý, màn hình cảm ứng và viên pin
**Nền tảng máy tính**,** Nền tảng điện toán** hoặc **nền tảng** **kỹ thuật số** là môi trường trong đó một phần mềm được thực thi. Nó có thể là phần cứng hoặc hệ điều hành,
nhỏ **Trò chơi lập trình** (tiếng Anh: _Programming game_) là một trò chơi máy tính mà người chơi không có ảnh hưởng trực tiếp vào tiến trình của game. Thay vào đó, một chương trình
Trong lập trình hướng đối tượng (OOP), **thực thể** (tiếng Anh: _instance_) là một sự xuất hiện cụ thể của bất kì đối tượng nào, thường tồn tại trong khoảng thời gian chạy của một
Thuật ngữ **máy tính mini** được phát triển vào những năm 1960 để mô tả các máy tính nhỏ hơn trở thành có thể với việc sử dụng các bóng bán dẫn và công nghệ
Trong lập trình hướng đối tượng, **siêu lớp** (tiếng Anh: _metaclass_) là một lớp mà thực thể của nó là lớp. Giống như một lớp thông thường định nghĩa hành vi của những đối tượng
**Java** (phiên âm Tiếng Việt: "_Gia-va_") là một ngôn ngữ lập trình hướng đối tượng, dựa trên lớp được thiết kế để có càng ít phụ thuộc thực thi càng tốt. Nó là ngôn ngữ
**C#** (**C Sharp**, đọc là _"xi-sáp"_) là một ngôn ngữ lập trình hướng đối tượng đa năng, mạnh mẽ được phát triển bởi Microsoft, C# là phần khởi đầu cho kế hoạch .NET của họ.
Trong khoa học máy tính, **reflection** (có thể dịch là "phản tỉnh", "tự xét mình") là việc tiến trình có khả năng xem xét, nội quan, và sửa đổi kết cấu cùng với hành trạng
**C** là một ngôn ngữ mệnh lệnh được phát triển từ đầu thập niên 1970 bởi Dennis Ritchie để dùng trong hệ điều hành UNIX. Từ đó, ngôn ngữ này đã lan rộng ra nhiều
Trong ngành khoa học máy tính, **lập trình hàm** (**lập trình chức năng**) là một mô hình lập trình xem việc tính toán là sự đánh giá các hàm toán học và tránh sử dụng
Trong lập trình máy tính, **callback** là một đoạn code chạy được (thường là một hàm A) được sử dụng như tham số truyền vào của hàm B nào đó. Hàm A được gọi ngay
**Ruby** là một ngôn ngữ lập trình hướng đối tượng, có khả năng phản ứng. Theo tác giả, Ruby chịu ảnh hưởng bởi Perl, Smalltalk, Eiffel, Ada và Lisp. Ruby cung cấp nhiều mẫu hình
:_Xem nghĩa khác của_ **_loa_** _từ bài _ **_Loa (định hướng)_** **Loa máy tính** là thiết bị dùng để phát ra âm thanh phục vụ nhu cầu làm việc và giải trí của con người
thumb|Một [[Màn hình tinh thể lỏng (LCD) ]] thumb|Một [[Ống tia âm cực|màn hình ống tia âm cực (CRT)]] **Màn hình máy tính** () là thiết bị điện tử gắn liền với máy tính với
**D** là một ngôn ngữ lập trình hệ thống hướng đối tượng, dùng câu lệnh, đa mẫu hình do Walter Bright của Digital Mars tạo ra và phát hành năm 2001. Quá trình thiết kế
Các thành phần chính của [[máy tính cá nhân để bàn.1: Màn hình, 2: Bo mạch chủ, 3: CPU, 4: Chân cắm ATA, 5: RAM, 6: Các thẻ cắm mở rộng chức năng cho máy,
Trong khoa học máy tính, một **đối tượng** () có thể là một biến, một cấu trúc dữ liệu, một hàm, hay một phương thức, và như vậy, là một vị trí trong bộ nhớ
Trong lập trình hướng đối tượng dựa trên lớp, **hàm tạo** (tiếng Anh: _constructor_, viết tắt: _ctor_) trong một lớp là một kiểu chương trình con đặc biệt được dùng để tạo ra đối tượng.
Trong lập trình hướng đối tượng, **giao thức** (tiếng Anh: _protocol_) hay **giao diện** (_interface_) là một phương tiện phổ biến để các đối tượng không liên quan giao tiếp với nhau. Đây là định
**Dylan** là một ngôn ngữ lập trình đa mẫu hình có hỗ trợ hàm, lập trình hướng đối tượng (OOP), động và phục hồi trong khi cung cấp một mô hình lập trình được thiết
**Lập trình đôi** (tiếng Anh: _Pair Programming_) là kiểu lập trình đòi hỏi hai kỹ sư phần mềm cùng tham gia một nỗ lực lập trình chung trên một máy trạm, nghĩa là chỉ có
Trong các ngôn ngữ lập trình máy tính, thuật ngữ **hàm tạo mặc định** (tiếng Anh: _default constructor_) dùng để chỉ một hàm tạo được tự động tạo ra bởi trình biên dịch trong trường
Trong **thị giác máy tính**, **mô hình túi từ** (**bag-of-words model,** mô hình BoW) có thể được áp dụng để phân loại hình ảnh, bằng cách coi các đặc trưng của hình ảnh như từ
Trong khoa học máy tính, **lập trình ràng buộc** (tiếng Anh: _constraint programming_) là một mẫu hình lập trình trong đó mối quan hệ giữa các biến được mô tả ở dạng các ràng buộc.
ScratchJr là ngôn ngữ lập trình trực quan được thiết kế phù hợp cho trẻ từ 5 tuổi đến HS Tiểu học để dạy cách suy nghĩ sáng tạo và suy luận một cách có
Phát triển não trái, tư duy logic, phân tích tối ưu. Rèn luyện tư duy lập trình sáng tạo. Bước đầu làm quen Nghề lập trình, công nghệ 4.0. Hiểu biết nguyên tắc lập trình,
ScratchJr là ngôn ngữ lập trình trực quan được thiết kế phù hợp cho trẻ từ 5 tuổi đến HS Tiểu học để dạy cách suy nghĩ sáng tạo và suy luận một cách có
nhỏ|Mô hình ngôn ngữ máy được lập nên bởi nhà toán học, nhà thủy văn và lập trình viên Vladimir Mikhailovich Kazakov, nhân viên Máy tính của Viện Energosetproekt năm 1962-1972. **Ngôn ngữ máy** (còn
**Phòng thí nghiệm khoa học máy tính và trí tuệ nhân tạo MIT (CSAIL) **là một phòng thí nghiệm nghiên cứu tại viện công nghệ Massachusetts thành lập bởi sự sáp nhập vào năm 2003