Lab, sigma, and big pi: Summation: Capital sigma, add up all the numbers Product: Capital pi, multiply all the numbers together Couple examples on the board Anyway, it's a different way to express a loop Convert, again on board Second note: vulkan tutorial was slow Let's pretend we don't have an RTX 2080 and do this on the CPU... Interfaces: A collection of functions that can be applied to a data type Some languages (Java, C++ with MFC) support these Python implicitly does, but not by name Linux kernel uses these by idea, but not name Matching: Java, C++, Python: Match by name (call a named method on the type) C: Function pointers (a struct is populated with function pointers) Important point here: An object can support more than one interface! Principle here: A wall tile is a game object, and ALSO a block object Maybe a block object isn't really part of the game, just landscaping or whatnot Some game objects don't actually block player movement Some objects do both! C++ support for the concept of interfaces is via inheritance: An object can inherit charactaristics from a base object Can add more properties or methods Can use different method definitions Must support (by name and parameters) the same methods NOT by definition - this can be different Same prototype, different definition Sometimes the base class isn't intended to ever be made Essentially, it defines an interface As in, objects of this type must have these methods and these properties Rigidly-enforced by the compiler "A mouse must have at least two movement axis and at least one button" "A three-button wheelmouse must have at least 4 movement axis and three buttons" Implementation might vary quite a bit! There isn't really any completely generic car, yet standards for cars exist Most of the time, you can just address objects as though they're generic What if you needed to know what specific type of object it is? Field with a definition? This may indicate an architecture problem (game engine example)