Scalar data types store one single element of data as opposed to composite data types. This is not a concept that is unique to Oracle PL/SQL; rather it is common to any programming language. Scalar types specific to Oracle include Integer Number Char Varhar2 Boolean etc.
In PL/SQL (and other languates like Pascal) a program unit such as a procedure or function must be defined before it can be invoked by another program unit. In PL/SQL package bodies forward declarations provide an optional means to get around this. You declare all program units before they actually appear in the package. A forward declaration is merely the name of the program unit and any parameters required. With forward declarations in place you are now free to arrange the program units in the package body in any order so as to improve readability or group program units together logically. Note that forward declaratiosn are not required so long as you code a program unit before it is called. Additionally forward declarations can appear anywhere not just at the top of the package body. Anytime you declare a program unit in advance of the actual coding that is a forward declaration.
IN OUT and INOUT refer to the mode of the parameter. This too is a general concept that is not unique to PL/SQL. IN defines a parameter as Input which means that the parameter is only used to provide a value to a program unit and nothing is returned. INOUT defines a parameter as Input/Output. This means that the parameter provides a value to the program unit and that the program unit may change the value of the parameter. OUT defines a parameter as Output only meaning that nothing is actually passed in to the parameter when calling the program unit but a value is retured. Output parameters are less useful and you would be hard pressed to find a situation where you need to use one.
Input parameters are also called value parameters or they are said to be passed by value. Input/Output parameters are also called variable address or reference parameters since they change values and the passing of the parameter is actually an address or memory location (a reference) to a place where the parameter is stored and can be changed by the called program unit.