itagagakiさんの仰るように、いろんな意味にとれるのと、私自身は趣味でやっているので適切な回答はできないですが、それでもいいなら。
まず定義として、言語はC++とします。(この時点ではまだ言語が定義されていないため)
オブジェクト、関数とこの二つが一気に出てくる言語ってC++とかなので。
まず、オブジェクト指向は……とかの前に、プログラミングの歴史を学びましょうか。
これがわかっているか、わかっていないかで相当違いますから。
(私は趣味でやっているので詳しい事は分かりませんのでざっくりとした理解で書きます。)
もともと、コンピュータは軍事利用でした。
たとえば弾道計算やら暗号解読やらです。
暗号解読は一応手作業でもやろうと思えばできます。
ですが、非現実的です。
たとえば暗号方式や時代によってはたかだか "Hello" の 5文字ですら、1カ月はかからないにしても、データの内容を考えると非効率です。
そこで機械に任せようという発想に。
でも機械は0と1からなる機械語( 電源のON/OFFの組み合わせと考えた方がいいかな? )しか認識できません。
でもこれは人間にとってはつらい。
101101101101101011000000000111011010111111010101...
のようなものです。
そこでアセンブラとかのような言語が出来ました。
ですが、このアセンブラ、微妙に使いづらい。
似たような処理をする場合も今でいうコピペの状態です。
それにいわゆるスパゲッティプログラムにもなります。
(Gotoの乱用でどこ行ったかわからなくなる……)
そこで手続き型言語と呼ばれる考え方が出てきました。
C言語とかそういう言語です。
これによって、for文とかで繰り返したり、関数とかにまとめて、関数を呼び出すだけにしたりとかです。
でもまだ問題がありました。
C言語ではデータと処理(関数)は別物です。
たとえばファイルへの書き込みの場合、
C
1FILE* fp = fopen( ファイルパス, "w" );
2fprintf( fp, 書き込む文字列 );
3fclose( fp );
と言う風にfclose関数とかはたまたまこのfpを処理するだけでした。
そこでオブジェクト指向と呼ばれる考え方の登場です。
データ(メンバ変数)と処理(メンバ関数)をひとまとめにしたオブジェクトを中心に見る発想法です。
ファイルへの書き込みをオブジェクトにするなら、
C++
1// 以下はあえてC言語のやつでやっています.(説明の為)
2#include<stdio.h>
3
4class FileWriter{
5 public:
6 FileWriter( const char* filepath ){
7 this->fp = fopen( filepath, "w" ); // コンストラクタでファイルを開く
8 }
9 ~FileWriter(){
10 fclose( this->fp ); // デストラクタでファイルを閉じる
11 }
12
13 int write( const char* text ){
14 fprintf( this->fp, text ); // writeメンバ関数で書き込む
15 }
16};
17
18int main( void ){
19 FileWriter fileWriter = new FileWriter( ファイルパス );
20 fileWriter.write( 書き込む文字列 );
21 // デストラクタで自動的にファイルが閉じられる
22}
とやれば、fileWriterだけが対象ファイルとその処理方法を知っているという状態にできますから、
「オブジェクトに管理や処理を任せる」ということが出来ます。
これによって、たとえばデザインパターンのBridgeパターンやStrategyパターンのようにオブジェクトを切り替えるだけで良かったりします。
関数は「処理をまとめて、呼び出せばOK」な状態にしてあるだけ。
オブジェクト指向でのオブジェクトは『データの処理や管理をオブジェクトに任せる』ためのものです。