An Object is a database table — it defines the structure for a kind of record. Each Object has fields (columns), records (rows), a page layout, and security settings.
Salesforce ships standard Objects like Account, Contact, Opportunity, Lead, Case, and User. These come pre-built with a fixed name and a set of standard fields. You can add custom fields to them, but you can't rename or remove the standard fields without translation tricks.
You can also create custom Objects for anything the standard schema doesn't cover — for example a custom Project object if you're building a delivery-tracking app. Custom objects always end with __c, like Project__c. They get the same platform features as standard objects: validation rules, page layouts, sharing rules, reports, the API, and so on.
Two more flavours exist: External Objects (__x), which proxy data from an external system in real time without copying it, and Big Objects (__b), which store billions of rows for archival use cases but trade off some standard features like reports and triggers.
