در
مهندسي نرم افزار و مهندسي دانش کلاس گروهي از اشياء است که ويژگي هاي مشترکی داشته، و رفتارهای مشترکی از خود نشان میدهند. درواقع، کلاسها انوع جدیدی هستند که شخص برنامه نويس خود، آنها را برای حل مسئلههای دنیای واقعی طراحی میکند، و حاوی تعریفهای لازم برای دو عنصر اساسی داده ها يا صفات و عمليات يا روش ها مي باشند.
اشیاء نمونههایی هستند که به هنگام اجراء از روی نقشهٔ ارائه شده بهوسیلهٔ کلاس ایجاد میشوند. میتوان گفت همانطور که متغير نمونهای از انواع اولیه است، شیء نمونهای از کلاس است. برنامهنویسی شیءگرا، دادهها (خواص) و متدها (رفتارها) را در بستههایی به نام کلاس محصور میکند. کلاسها دارای خاصیت پنهانسازی اطلاعات هستند. این بدان معناست که اشیاء میدانند که چگونه از طریق رابطهای تعریفشده با یکدیگر ارتباط برقرار کنند. معمولا، اشیاء نباید از چگونگی پیادهسازی اشیاء دیگر مطلع باشند، بهعبارت دیگر، جزئیات پیادهسازی در داخل خود اشیاء پنهان شدهاند.
مثال: رانندگی خودرو بدون اطلاع از خصوصیات طرز کار داخلی موتور و سیستمهای اگزوز و جعبهدنده امکانپدیر است. در
مهندسي نرم افزار ضرورت پنهانسازی اطلاعات امری بسیار مهم هست.
در زبانهای رویهای برنامه نويسي، مانند زبان
C، برنامه نويسي بيشتر عملگرايانه است. درحاليکه زبان هاي برنامه نويسي
++C،
جاوا و
C# شیءگرایانه هستند. واحد برنامهنویسی در زبانهای رویهای تابع است، ولی، در زبانهای
اشیاءنگر کلاسها - که اشیاء نهایتا از آنها ایجاد میشوند ( یا اصطلاحا نمونهسازی میشوند) - واحد برنامهنویسی را تشکیل میدهند. توابع نیز در داخل کلاسها به عنوان متدهایی محصور میشوند.