At a very high level, smart contracts are essentially validators to either allow or reject certain transactions (state transitions). These validations + policies essentially encode the logic of the application.
States & state transitions are encoded by Datum and Redeemer. Of course, the validator validates this state transition.
New currency and assets can be minted or burned. The minted and the burned values are part of the transaction whose validity is checked by the associated policy (Currency hash ~ Minting policy hash).
The foundational datatype of the smart contract is essentially just the validator. Everything else is just data that the validator requires to check the validity of the transaction.