import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource  {
    @IBOutlet weak var tableView: UITableView!

    var dataArray:[Int] = []

    // ボタンが押された時にデータを追加する
    @IBAction func add(sender: UIBarButtonItem) {
        dataArray.append(dataArray.count)
        tableView.reloadData()
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    // MARK: UITableViewDataSource プロトコルのメソッド
    // TableView の各セクションのセルの数を返す
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return dataArray.count
    }

    // 各セルの内容を返す
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        // 再利用可能な cell を得る
        let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "Cell")

        // Cellに値を設定する.
        cell.textLabel?.text = "\(dataArray[indexPath.row])"
        cell.detailTextLabel?.text = "Subtitle \(dataArray[indexPath.row])"

        return cell
    }
}

いくつか質問があります。
上記のプログラムで

@IBOutlet weak var tableView: UITableView!

このtableViewは関数ですか?それともインスタンスですか?

また

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return dataArray.count
}

で引数となっているnumberOfRowsInSectionはメソッドだと思うのですが
それがどうして引数になるのですか?

最後にこのプログラムは関数を定義しているだけなのに
どうして実行するのかが分かりません。

たくさんの質問をすいませんがよろしければ
回答を宜しくお願いします。